挑战程序设计竞赛(算法和数据结构)——17.2 01背包问题(动态规划)的JAVA实现

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——17.2 01背包问题(动态规划)的JAVA实现相关的知识,希望对你有一定的参考价值。

题目&思路:

代码:

import java.util.ArrayList;
import java.util.Scanner;

public class KnapsackProblem 
    public static void main(String[] args) 
        class Item
            public int value, weight;
            Item()
            Item(int value, int weight)
                this.value = value;
                this.weight = weight;
            
        

        Scanner cin = new Scanner(System.in);
        int N = cin.nextInt();
        int W = cin.nextInt();
        int C[][] = new int[N+1][W+1];
        ArrayList<Item> items = new ArrayList();
        //items动态数组的初始化

        for (int i = 0;i<=N;i++)
            if(i==0)
                Item e = new Item(0, 0);
                items.add(e);
            
            else 
                int v = cin.nextInt();
                int w = cin.nextInt();
                Item e = new Item(v, w);
                items.add(e);
            
        

        for (int w=1;w<=W;w++)
            for (int i=1;i<=N;i++)
                if(w-items.get(i).weight<0)
                    C[i][w] = C[i-1][w];
                
                else 
                    C[i][w] = Math.max(C[i-1][w], C[i][w-items.get(i).weight]+items.get(i).value);
                
            
        

        int max_value = 0;
        for (int i=1;i<=N;i++)
            if (max_value<C[i][W])
                max_value = C[i][W];
            
        
        System.out.println(max_value);
    


输入:

4 5
4 2
5 2
2 1
8 3

输出:

13

以上是关于挑战程序设计竞赛(算法和数据结构)——17.2 01背包问题(动态规划)的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章

挑战程序设计竞赛(算法和数据结构)——6.2穷举搜索,分治法JAVA实现

挑战程序设计竞赛(算法和数据结构)——7.4计数排序(桶排序)的JAVA实现

挑战程序设计竞赛(算法和数据结构)——15.1所有点对间的最短路径(Floyd算法)的JAVA实现

挑战程序设计竞赛(算法和数据结构)——10.4优先队列的JAVA实现

挑战程序设计竞赛(算法和数据结构)——4.3队列习题的Java实现

挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现