#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int w[30],num[30],dp[55][55];
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
memset(w,0,sizeof(w));
memset(dp,0,sizeof(dp));
for(int i = 1; i <= 26; i++)
{
w[i] = i;
scanf("%d",&num[i]);
}
dp[0][0] = 1;//0个字母,0容量的时候方案数为1
// for (i = 0; i <= 26; i++)
// dp[i][0] = 1;
for(int i = 1; i <= 26; i++)//有N种物品
{
for(int j = 0; j <= 50; j++)//容量
{
for(int k = 0; k <= num[i] && w[i]*k <= j; k++)//物品数量
dp[i][j] += dp[i-1][j-w[i]*k];//最优方案个数
}
}
int ans = 0;
for(int i = 1; i <= 50; i++)
ans += dp[26][i];
printf("%d\n",ans);
}
return 0;
}
hdu 2082 (dp)
最新推荐文章于 2019-04-19 09:40:53 发布