/*
* Sicily1011Lenny'sLuckyLotto.cpp
*
* Created on: 2015年1月13日
* Author: Prophet
*/
#include<iostream>
#include<stdio.h>
using namespace std;
const int MAX_N = 10+2;
const int MAX_M = 2000+10;
int main(){
long long dp[MAX_N][MAX_M];//dp[i][j]表示第i位是j时的方案数,dp[i][j]=sum(dp[i-1][k]|1<=k<=j/2)
for(int i=1;i<MAX_M;i++)
dp[1][i]=1;//只有1位时,所有的j的方案数都是1
for(int i=2;i<MAX_N;i++){
for(int j=1;j<MAX_M;j++){
dp[i][j]=0;//初始化
for(int k=1;k*2<=j;k++){
dp[i][j]+=dp[i-1][k];
}
}
}
int TestCase;
scanf("%d",&TestCase);
int times=0;
while(++times<=TestCase){
int n,m;
scanf("%d%d",&n,&m);
long long result=0;
for(int i=1;i<=m;i++)
result+=dp[n][i];
cout<<"Case "<<times<<": n = "<<n<<", m = "<<m<<", # lists = "<<result<<endl;
}
return 0;
}
Sicily1011动态规划
最新推荐文章于 2019-03-10 22:00:54 发布