http://acm.hdu.edu.cn/showproblem.php?pid=2067
这道题的状态我很久以前就分析过了,是一道递推题,当初感觉思维很乱没写出来。今天好好研究了一下动态规划,发现用动态规划中记忆化搜索的思想能解决此问题。
View Code
#include <stdio.h>
#include <string.h>
int n,flag=1;
__int64 d[100][100];
__int64 f(int i,int j)
{
if(d[i][j]>=1)return d[i][j];
if(j==1)return d[i][j]=i;
if(i==j)return d[i][j]=f(i,j-1);
return d[i][j]=f(i-1,j)+f(i,j-1);
}
int main()
{
while(scanf("%d",&n))
{
if(n==-1)break;
memset(d,0,sizeof(d));
printf("%d %d %I64d\n",flag,n,2*f(n,n));
flag++;
}
return 0;
}