杭电ACM1295

来源:百度知道 编辑:UC知道 时间:2024/06/19 23:23:18
http://acm.hdu.edu.cn/showproblem.php?pid=1295
有做杭电题的吗,帮忙一下啊,这道题我感觉是用递归的思想,求的一个规律,我算的是
int f(int n)
{
if(n==1||n==2)
return 1;
else if(n==3)
return 3;
else
{
return 7+f(n-1)+(n-3)*2;
}
}
错误的结果,请高手指点,谢谢

递推公式不是这样
应该是
MoveChess(n)=k+MoveChess(n-2*k)+MoveChess(2*k)(+k);

#include<iostream.h>

int changed[1001];
int memory[1001]={0};
int k=0,kk=0;

int MoveChess(int n)
{
int result=0;

//MoveChess(n)=k+MoveChess(n-2*k)+MoveChess(2*k)(+k);

if(n<4)
{
return (2*n-3);
}else{
for(k=1;k<=int((n-2)/2);k++)
{
int temp;

if((memory[n-2*k]!=0)&&(memory[2*k]!=0))
{
if(changed[n-2*k]*changed[2*k]==1)
temp=2*k+memory[n-2*k]+memory[2*k];

if(changed[n-2*k]*changed[2*k]==-1)
temp=k+memory[n-2*k]+memory[2*k];
}else{

if(changed[n-2*k]*changed[2*k]==1)
temp=2*k+MoveChess(n-2*k)+MoveChess(2*k);

if(changed[n-2*k]*changed[2*k]==-1)
temp=k+MoveChess(n-2*k)+MoveChess(2*k);
}

if(result<temp)
{
result=temp;