hdu 1284

来源:互联网 发布:佳美迅授课软件 编辑:程序博客网 时间:2024/04/28 22:32

       完全背包问题的变形,物品大小为1,2,3,背包容量为N,求将背包装满的所有方案。二维动态方程为:dp[i][j]=sum(dp[i-1][j],dp[i][j-v[i]]),用滚动数组表示则为:

dp[j]=sum(dp[j],dp[j-v[i]]).

代码如下:

#include<cstdio>#include<cstring>#include<iostream>#include<cstdlib>#include<cmath>#include<algorithm>#include<queue>#include<set>#include<map>using namespace std;const int N=32768;int dp[N] ,n;int main(){    int i,j;    dp[0]=1;    for (i=1;i<=3;i++)         for (j=i;j<N;j++) dp[j]+=dp[j-i]; // 也就是 dp[j]=sum(dp[j],d[j-i]);    for (i=1;i<10;i++) cout<<dp[i]<<" ";cout<<endl;    while(cin>>n)    {        printf("%d\n",dp[n]);    }}


0 0
原创粉丝点击