http://acm.hdu.edu.cn/showproblem.php?pid=2082
思路;这题直接套用模板,因为1是有限个,所以初始化要改变一下,而且求的是小于等于50的总和,所以把各项加起来。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
#include <stdlib.h>
using namespace std;
int dp[250005];
int main()
{
int T;
cin>>T;
while(T--)
{
int c1[100],c2[100];
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
c1[0]=1;
int a[28];
int i,j,k;
for(i=1;i<=26;i++)
{
cin>>a[i];
}
for(i=1;i<=26;i++)
{
for(j=0;j<=50;j++)
{
for(k=0;k<=a[i]&&j+k*i<=50;k++)
{
c2[k*i+j]+=c1[j];
}
}
for(j=0;j<=50;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
long long int sum=0;
for(j=1;j<=50;j++)sum+=c1[j];
cout<<sum<<endl;
}
return 0;
}