UVa 10446

来源:互联网 发布:手机立体投影软件 编辑:程序博客网 时间:2024/06/06 05:54

题目:统计递归函数调用的次数。

分析:动态规划(DP)。

            状态定义:f(n,back)为对应输入的调用次数;

            转移方程:f(n,back)= 1+sum(f(n-1,back),f(n-2,back),...,f(n-back,back));

            初始状态:f(0,x)= 1,f(1,x)= 1;

            注意每个状态都要+1代表自己,f(0,x)的时候不是0是1;

说明:输入中有n和back小于0的,按照题目里的%I64u输出一直WA,改成%llu就过了。。。

#include <stdio.h>#include <stdlib.h>#include <string.h>unsigned long long F[66][66];int main(){for (int i = 0; i < 61; ++ i) {for (int j = 0; j < 61; ++ j) {F[i][j] = 1ULL;}}for (int i = 2; i < 61; ++ i) {for (int j = 1; j < 61; ++ j) {F[i][j] = 1ULL;for (int k = 1; k <= j; ++ k) {if (i-k <= 1) {F[i][j] += 1ULL;}else if (i-k > 1) {F[i][j] += F[i-k][j];}}}}int n, back, cases = 1;while (~scanf("%d%d",&n,&back) && n < 61) {if (n >= 0 && back >= 0) {printf("Case %d: %llu\n",cases ++,F[n][back]); // %llu ?}else {printf("Case %d: 1\n",cases ++);}}    return 0;}


原创粉丝点击