题意:求长度为L状态为S的方法有多少,用三维表示前i个字符组成长度为j的状态是S的个数有多少,看了题解才知道用三维的,开始想到的是二维的,功力不够啊,想到的话就不会难了,
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int f[27][27][355];
int main(){
memset(f,0,sizeof(f));
f[0][0][0] = 1;
int sum = 355;
for (int i = 1; i <= 26; i++)
for (int j = 0; j <= i; j++)
for (int k = 0; k <= 351; k++){
f[i][j][k] = f[i-1][j][k];
if (j && k >= i)
f[i][j][k] += f[i-1][j-1][k-i];
}
int cas = 1,l,s;
while (scanf("%d%d",&l,&s) != EOF && l+s){
int ans = (l>26||l<1||s>351||s<1)?0:f[26][l][s];
printf("Case %d: %d\n",cas++,ans);
}
return 0;
}