首页 > 其他分享 >多重背包

多重背包

时间:2022-08-20 12:01:11浏览次数:49  
标签:多重 背包 int ij 物品 101 dp

#include<iostream>//01背包问题状态转移方程dp[i][j]=max(dp[i-1 ][j],dp[i-1][j-w[i]]+p[i])区别:因为物品只能装一次所以在比较装入物品后的价值时使用i-1而不是i因为物品只能装一次 
using namespace std;
int main(){
    int dp[101][101]={}; 
    int n,c;//物品种类数,背包容量 
    int w[101]={};//重量 
    int p[101]={};//价值 
    int k[101]={};//数量 
    cin>>n>>c;
    for(int i=1;i<=n;i++){
        cin>>w[i]>>p[i]>>k[i]; 
    } 
    for(int i=1;i<=n;i++){
        for(int j=1;j<=c;j++){
            dp[i][j]=dp[i-1][j];//不放入 
            for(int ij=1;ij<=k[i];ij++){//各种数量的情况 
                if(j>=ij*w[i]){//当容量大于数量*重量时比较不放入和放入谁最优 
                    dp[i][j]=max(dp[i][j],dp[i-1][j-ij*w[i]]+ij*p[i]);//状态转移方程 'dp[i][j]'15行已考虑全部不放入的情况,但是多重背包会多次放数量不同的物品所以当ij=1且dp[i-1][j-ij*w[i]]+ij*p[i]>dp[i-1][j]时最优选择不为dp[i-1][j]然而还要考虑i=2,i=3......所以此时要和dp[i][j]比较
                    cout<<dp[i][j]<<endl;
                }
            }
        }
    }
    cout<<dp[n][c]<<endl;//最终值 
    return 0;
}
/*3 13
2 4 8
3 7 2
4 10 1

29
*/

 

#include<iostream>//01背包问题状态转移方程dp[i][j]=max(dp[i-1 ][j],dp[i-1][j-w[i]]+p[i])区别:因为物品只能装一次所以在比较装入物品后的价值时使用i-1而不是i因为物品只能装一次 using namespace std;int main(){    int dp[101][101]={};     int n,c;//物品种类数,背包容量     int w[101]={};//重量     int p[101]={};//价值 int k[101]={};//数量     cin>>n>>c;    for(int i=1;i<=n;i++){        cin>>w[i]>>p[i]>>k[i];     }     for(int i=1;i<=n;i++){        for(int j=1;j<=c;j++){            dp[i][j]=dp[i-1][j];//不放入             for(int ij=1;ij<=k[i];ij++){//各种数量的情况             if(j>=ij*w[i]){//当容量大于数量*重量时比较不放入和放入谁最优                 dp[i][j]=max(dp[i][j],dp[i-1][j-ij*w[i]]+ij*p[i]);//状态转移方程 'dp[i][j]'15行已考虑全部不放入的情况,但是多重背包会多次放数量不同的物品所以当ij=1且dp[i-1][j-ij*w[i]]+ij*p[i]>dp[i-1][j]时最优选择不为dp[i-1][j]然而还要考虑i=2,i=3......所以此时要和dp[i][j]比较cout<<dp[i][j]<<endl;}        }}    }    cout<<dp[n][c]<<endl;//最终值     return 0;}/*3 132 4 83 7 24 10 1
29*/

标签:多重,背包,int,ij,物品,101,dp
From: https://www.cnblogs.com/AndyYuan/p/16607453.html

相关文章

  • 完全背包问题
    #include<iostream>//01背包问题状态转移方程dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+p[i])区别:因为物品只能装一次所以在比较装入物品后的价值时使用i-1而不是i因为......
  • 数模(1)—— 多重共线性的验证
    模型的解释变量之间存在线性关系若中心化之后自变量的相关系数矩阵R=X'X接近于退化就存在多重共线性R有多少个特征根接近于零,设计矩阵X就有多少个多重共线性关系......
  • 0/1背包优化
    【问题描述】八戒在魔法森林游玩时,不慎迷路,沿着小溪路走下去,不知不觉来到一个洞口前。八戒壮着胆子进入洞中,走了几十步,竟豁然开朗。原来洞中深处是无尽的宝藏,八戒立刻......
  • 【题解】【Shopping】【树上依赖型背包】
    很厉害的题。在任务计划里躺了一年。。。题目传送门思考之路题目要让我们在付出不超过m的代价在树上找到一个权值最大的连通块。容易想到树形dp,设\(f_{i,j}\)表示选的......
  • 完全背包转化为多重背包
    完全背包转化为多重背包前言在本篇文章当中主要给大家介绍如何将完全背包问题转化成多重背包问题,在前面的文章完全背包当中,我们仔细的介绍了完全背包的状态转移方程、根......
  • 背包问题
    packagepack;importjava.util.Arrays;publicclassKnapSack{publicstaticintgetMax01(int[]b,int[]w,inttotal){int[][]mem=newint[b......
  • 背包
    背包是线性DP中一类重要而特殊的模型。没有骚话水了下面就直入主题,看一下DP中的“常客”————背包问题。以01背包的模板题为例。有N件物品和一个容量为V的背包。......