zoukankan      html  css  js  c++  java
  • 背包的最大价值

     题目描述:
    有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?
     
     输入1背包最大容量:10
    输入物品数:5
    输入每件物品的重量:2,2,6,5,4
    它们的价值:6,3,5,4,6
    输出:最大的价值总和    15
     
     
    另外一组测试数据:
     
     输入1背包最大容量:1000
    输入物品数:5
    输入每件物品的重量:144,487,210,567,1056
    它们的价值:990,436,673,58,897
    输出:最大的价值总和    2099
     

    import java.util.Scanner;

    public class bag {
    private static int t = 0;

    public static void main(String[] args) {
    int max = new Scanner(System.in).nextInt();
    int n = new Scanner(System.in).nextInt();
    int m = 0;//重量的定位
    int w = 0;//下标的定位
    int golbe = 0;
    int a[] = new int[n];//重量数组
    int p[] = new int[n];//价值数组
    int b[] = new int[n];//选中数组
    int k[] = new int[100];//所有可能结果

    for (int i = 0; i < a.length; i++) {
    a[i] = new Scanner(System.in).nextInt();
    }
    for (int i = 0; i < p.length; i++) {
    p[i] = new Scanner(System.in).nextInt();
    }
    f(a,p,b,k,max,n,m,w,golbe);
    int fin = k[0];
    for (int i = 0; i < k.length-1; i++) {
    if(k[i+1]>fin){
    fin = k[i+1];
    }
    }
    System.out.println("fin:"+fin);
    }

    private static void f(int[] a, int[] p, int[] b, int[] k, int max, int n, int m, int w, int golbe) {
    if(m<max&&w<n){
    for (int i = w; i < n; i++) {
    if(b[i]!=0){
    continue;
    }else{
    b[i]=1;
    m += a[i];
    f(a,p,b,k,max,n,m,w+1,golbe);
    b[i] = 0;
    m -= a[i];
    f(a,p,b,k,max,n,m,w+1,golbe);
    break;
    }
    }
    }else{
    if(m>max){
    for (int i = a.length-1; i >=0; i--) {
    if(b[i]==1){
    b[i]=0;
    break;
    }
    }
    }
    for (int i = 0; i < b.length; i++) {
    if(b[i]==1){
    golbe += p[i];
    }
    }
    k[t] = golbe;
    t++;
    }
    }
    }

    答案仅供参考

  • 相关阅读:
    浅谈自动化测试
    Linux cron定时介绍
    Python上下文管理器
    Robot Framework robot命令
    Web自动化测试之playwright:设置浏览器语言
    Python文件及目录处理方法
    2021google开发者大会
    linux环境变量设置小结
    Eclipse快捷键
    java计时 小计
  • 原文地址:https://www.cnblogs.com/-rainbow-/p/7797296.html
Copyright © 2011-2022 走看看