题目:http://acm.hdu.edu.cn/showproblem.php?pid=2082
类似题目:
选课时间(题目已修改,注意读题)
http://acm.hdu.edu.cn/showproblem.php?pid=2079
开始以为是个多维背包。。但是做着做着老是得不出答案。。
然后慢慢慢慢发现了。。
用ff【i】存储 上当前第i个字母与i前面哪些字母所组成的个数
用f【i】存储所有的;
原来这好像是母函数。
下面是AC代码:
#include<iostream>
#include<cstring>
using namespace std;
int a[27];
int f[60];
int ff[600];
int main()
{
int t;
int i,j,k;
int cnt;
cin>>t;
while(t--)
{
for(i=1;i<=26;i++)
cin>>a[i];
memset(f,0,sizeof(f));
f[0]=1;
cnt=0;
for(i=1;i<=26;i++)
{
memset(ff,0,sizeof(ff));
for(j=1;j<=a[i];j++)
{
for(k=0;k<=50;k++)
{
ff[k+j*i]+=f[k];
}
}
for(j=1;j<=50;j++)
f[j]+=ff[j];
}
for(i=1;i<=50;i++)
cnt+=f[i];
printf("%d\n",cnt);
}
return 0;
}