hdu 2082 找单词
http://acm.hdu.edu.cn/showproblem.php?pid=2082
又是一个母函数模板题,不多说了:
View Code
#include<cstdio>
using namespace std;
int main()
{
int n,s[27],c1[100],c2[100],sum,i,j,k,w;
scanf("%d",&n);
while(n--)
{
for(i=1;i<=26;i++)
scanf("%d",&s[i]);
for(i=0;i<=50;i++)
c1[i]=c2[i]=0;
for(i=0;i<=s[1];i++)
{
c1[i]=1;
c2[i]=0;
}
for(i=2;i<=26;i++)
{
for(j=0;j<=50;j++)
for(k=0,w=0;w<=s[i]&&k+j<=50;k+=i,w++)
{
c2[k+j]+=c1[j];
}
for(j=0;j<=50;j++)
{
c1[j]=c2[j];
c2[j]=0;
}
}
sum=0;
for(i=50;i>=1;i--)
if(c1[i]!=0)
sum+=c1[i];
printf("%d\n",sum);
}
return 0;
}
DP 背包:
View Code
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n,s[27],ans[60],sum,i,j,k,w;
scanf("%d",&n);
while(n--)
{
sum=0;
for(i=1;i<=26;i++)
scanf("%d",&s[i]);
memset(ans,0,sizeof(ans));
ans[0]=1;
for(i=1;i<=26;i++)
for(k=50;k>=0;k--)
for(j=1;j<=s[i]&&i*j<=k;j++)
ans[k]+=ans[k-i*j];
for(i=1;i<=50;i++)
sum+=ans[i];
printf("%d\n",sum);
}
return 0;
}