0
点赞
收藏
分享

微信扫一扫

蓝桥杯 算法提高 01背包



算法提高 01背包  

时间限制:1.0s   内存限制:256.0MB



    

问题描述



  给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个.



输入格式



  输入的第一行包含两个整数n, m,分别表示物品的个数和背包能装重量。
  以后N行每行两个数Wi和Vi,表示物品的重量和价值



输出格式



  输出1行,包含一个整数,表示最大价值。



样例输入

3 5

2 3

3 5

4 7



样例输出

8



数据规模和约定

AC代码:

1<=N<=200,M<=5000.

import java.util.Arrays;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[] widght = new int[210];
int[] value = new int[210];
int[] dp = new int[5010];
for (int i=0; i<n; ++i) {
widght[i] = in.nextInt();
value[i] = in.nextInt();
}
for (int i=0; i<n; ++i) {
for (int j=m; j>=widght[i]; j--) {
dp[j] = Math.max(dp[j], dp[j-widght[i]] + value[i]);
}
}
System.out.println(dp[m]);
}
}



举报

相关推荐

0 条评论