您的位置:首页 > 其它

ZOJ 2402 Lenny's Lucky Lotto Lists(简单DP)

2014-03-25 14:28 465 查看
题目大意:给出两个整数M,N 在1~M的范围里选出N个数,条件是第i个数必须大于等于第i-1个数的两倍, 求总共能选出的方案数.

设dp[i][j]为1~i选择j个数出来的方案数,那么dp[k][j + 1] += dp[i][j] (2 * i<= k <= M)

#include <cstdio>
#include <memory.h>
using namespace std;
const int MAX = 2001;

long long dp[MAX][11];

void init(){
for(int i = 1; i < MAX; ++i){
dp[i][1] = 1;
for(int j = 1; j <= 10; ++j){
for(int k = 2 * i; k < MAX; ++k){
dp[k][j + 1] += dp[i][j];
}
}
}
}
int main(int argc, char const *argv[]){
int C, caseno = 1;
init();
scanf("%d", &C);
while(C--){
int n, m;
scanf("%d%d", &n, &m);
long long ans = 0;
for(int i = 1; i <= m; ++i){
ans += dp[i]
;
}
printf("Case %d: n = %d, m = %d, # lists = %lld\n", caseno++, n, m, ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: