http://acm.hdu.edu.cn/showproblem.php?pid=3284
思路,简单dp题,开始想歪了,然后想通了
代码如下:
#include <cstdio> #include <cstring> using namespace std; const int N = 101; int dp[N][N][2];//f[N][N][2]; void inti() { // f[2][1][1] = 1; // f[2][0][0] = 1; // f[2][0][1] = 1; dp[2][1][1] = 1; dp[2][0][1] = 1; dp[2][0][0] = 2; for(int i = 2;i <= 99;i ++) for(int k = 0;k <= i - 1;k ++) { // if(f[i][k][0]) // { dp[i + 1][k][0] += dp[i][k][0]; // f[i + 1][k][0] = 1; dp[i + 1][k][1] += dp[i][k][0]; // f[i + 1][k][1] = 1; // } // if(f[i][k][1]) // { dp[i + 1][k][0] += dp[i][k][1]; // f[i + 1][k][0] = 1; dp[i + 1][k + 1][1] += dp[i][k][1]; // f[i + 1][k + 1][1] = 1; // } } } int main() { inti(); int t; scanf("%d",&t); while(t --) { int u,n,k; scanf("%d %d %d",&u,&n,&k); printf("%d %d\n",u,dp[n][k][0] + dp[n][k][1]); } }