挑战程序设计竞赛(算法和数据结构)——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实现