zoukankan      html  css  js  c++  java
  • c++01背包一维数组版及java多重背包

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const int maxn=1010;
    int c[maxn],w[maxn];
    int dp[maxn];
    int main(){
        int n,v;
        cin>>n>>v;
        for(int i=1;i<=n;i++) cin>>c[i];
        for(int i=1;i<=n;i++) cin>>w[i];
    
        for(int i=1;i<=n;i++){
            for(int j=v;j>=c[i];j--){                //为了防止之前的结果影响之后的必须从尾部向前走,因为这是01背包一维数组,每种物品只能选择一个
                dp[j]=max(dp[j],dp[j-c[i]]+w[i]);   //在完全背包下可以从前往后走,因为物品的个数是无限个,而多重背包与01背包一般情况下都可以相互转换的,所以多重只是对物品分了类而已相同的物品在一个类中,数量多了几个
    //01背包则没有分类这一说,都是一样的 } } printf(
    "%d ",dp[v]); return 0; }
    class Solution
    {
       private int v[];   //价值
       private int c[];   //数量
       private int w[];   //体积
       private int num;   //物品的种数
       private int k;     //物品的总数
       private int dp[];  //最大价值表
       private int cnt;   //背包的最大容量 
       private Scanner iner=new Scanner(System.in);
    
       public int Selected()
       {
        for(int i=0;i<this.k;++i)
        {
            for(int j=this.cnt;j>=this.w[i];--j)
            {
                dp[j]=Math.max(dp[j], dp[j-this.w[i]]+this.v[i]);
            }
        }
        return dp[this.cnt];
       }
    
       public Solution()
       { 
           System.out.print("请输入背包的最大容量:");
           this.cnt=iner.nextInt();
           System.out.print("请输入物品的种数:");
            this.num=iner.nextInt();
            this.c=new int[this.num+100];
            this.w=new int[this.num+100];
            this.dp=new int[this.num+100];
            this.v=new int[this.num+100];
           System.out.print("请输入每种物品的价值体积及数量:");
           for(int i=0;i<this.num;++i)
           {
            this.v[i]=iner.nextInt();
            this.w[i]=iner.nextInt();
            this.c[i]=iner.nextInt();
           }
           this.k=this.num;
           for(int i=0;i<this.num;++i)
           {
            while(this.c[i]!=1)
            {
              this.v[k]=this.v[i];
              this.w[k]=this.w[i];
              this.c[i]--;
              this.c[k]=this.c[i];
              k++;
            }
           }
       }
    }
  • 相关阅读:
    Exceptionless in Docker on Linux 搭建及部署疑难杂症
    Golang 基础语法介绍及对比(二)
    Go Windows 环境安装及配置(一)
    ElasticSearch搜索解析
    ElasticSearch文档及分布式文档存储
    ElasticSearch利用IK实现全文搜索
    ElasticSearch简要总览
    轻松驾驭统计学——数据分析必备技能
    【面试】数据分析常见问题
    【Echarts】
  • 原文地址:https://www.cnblogs.com/z2529827226/p/11629975.html
Copyright © 2011-2022 走看看