poj1276 简单多重背包压缩为01背包 模板题 适用于w[i]=v[i];

#include
#include
#include
#include
using namespace std;
int dp[100010];
int f[10010];
int main(){
    int M;
    int a[15];
    int b[15];
    while(cin>>M){
       int n;
       cin>>n;
       for(int i=0;i>b[i]>>a[i];
        memset(dp,0,sizeof(dp));
        memset(f,0,sizeof(f));
        int k=1;//将多重背包压缩为01背包,且w[i]=v[i]
        int t;
        for(int i=0;i0){
                f[k++]=t*a[i];
                b[i]-=t;
                t*=2;
            }
            f[k++]=b[i]*a[i];
        }//
        for(int i=0;i=f[i];j--)
              dp[j]=max(dp[j],dp[j-f[i]]+f[i]);
        cout<

你可能感兴趣的:(DP,模板,poj,ACM)