背包问题
来源:互联网 发布:南昌市网络教育平台 编辑:程序博客网 时间:2024/06/05 12:43
背包问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大。
输入第一行输入一个正整数n(1<=n<=5),表示有n组测试数据;
随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10);s表示有s个物品。接下来的s行每行有两个正整数v,w。输出输出每组测试数据中背包内的物品的价值和,每次输出占一行。
样例输入
1
3 15
5 10
2 8
3 9
样例输出
65
JAVA:
import java.util.Scanner;
public class Temo {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int s, n, W, v, w, i, j, k;
s = input.nextInt();
while (s-- != 0) {
n = input.nextInt();
W = input.nextInt();
int V[]= new int[25];
for(int a = 0; a < V.length; a++)
V[a] = 0;
for(i = 0; i < n; i++){
v = input.nextInt();
w = input.nextInt();
for(j = 0; j < w; j++){
for(k = W; k > 0; k--){
V[k] = V[k-1] + v > V[k] ? V[k-1] + v : V[k];
}
}
}
System.out.println(V[W]);
}
}
}
优化前代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int k = input.nextInt();
while (k-- != 0) {
int n = input.nextInt();
int W = input.nextInt();
int w[] = new int[n];
int v[] = new int[n];
for (int i = 0; i < n; i++) {
v[i] = input.nextInt();
w[i] = input.nextInt();
}
System.out.println(result(W, n, w, v));
}
}
private static int result(int W, int n, int[] w, int[] v) {
int sum = 0;
int temp = 0;
for (int i = 0; i < n; i++) {
for (int j = 1; j < n; j++) {
if (v[j] > v[j - 1]) {
temp = w[j];
w[j] = w[j - 1];
w[j - 1] = temp;
temp = v[j];
v[j] = v[j - 1];
v[j - 1] = temp;
}
}
}
for (int i = 0; i < n; i++) {
if (W > w[i]) {
sum += w[i] * v[i];
W -= w[i];
} else {
sum += W * v[i];
break;
}
}
return sum;
}
}
- 【无限背包】背包问题
- 背包问题---01背包
- 背包问题--部分背包
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- 背包问题
- Servlet 使用Filter HttpSessionListener HttpSessionAttributeListener实现webSession管理
- 仿微信android客户端分享网页内容解决方案
- oracle多行记录与批量插入
- frame\center\bounds三者主要区别
- Android开发中,使用https发送安全请求的实现
- 背包问题
- 盗链test(~~)
- 获取媒体库中的音乐文件
- Java 编程的动态性,第 1 部分: 类和类装入
- Android系统AlertDialog使用
- NSBundle的使用
- LaunchPad删除应用或残留图标的几种办法
- 最新版SDWebImage的使用 -- 推荐 - 高效
- 【iOS开发】设置TabBarItem上文字跟图片一样的颜色