动态规划之混合背包

来源:互联网 发布:武汉纵横网络 编辑:程序博客网 时间:2024/05/16 04:17

将三种背包混合起来就是混合背包:

#include<bits/stdc++.h>using namespace std;const int maxn=1e4;const int INF=0x3f3f3f3f;int dp[maxn][maxn];int main(){    ios::sync_with_stdio(0);    cin.tie(0);    int N,V;    cin>>N>>V;    memset(dp,0,sizeof(dp));    for(int i=0;i<N;i++) {        int weight,value,num;        cin>>weight>>value>>num;        if(num==1)        for(int j=weight;j<=V;j++)  {//01背包            dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight]+value);        }        else if(num==INF)        for(int j=weight;j<=V;j++) {//完全背包            dp[i][j]=max(dp[i][j-weight]+value,dp[i][j]);        }        else        for(int k=0;k<=num;k++) {//多重背包            for(int j=V;j>=weight*k;j--) {                dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight*k]+value*k);            }        }    }    return 0;}

刚写的代码,肯定还有不完善的地方,慢慢填

原创粉丝点击