参考代码:
import java.util.Scanner; public class T2134混合背包 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int m=scanner.nextInt();//背包 int n=scanner.nextInt();//物品数量 int dp[]=new int[m+1]; for (int i = 0; i < n; i++) { int w=scanner.nextInt();//重量 int c=scanner.nextInt();//价值 int p=scanner.nextInt();//数量 for (int j = m; j >=w; j--) { if (p==0) { for (int j2 = 1; j2*w<=j; j2++) { dp[j]=Math.max(dp[j], dp[j-j2*w]+j2*c); } } else { for (int j2 = 0; j2*w <=j&&j2<=p; j2++) { dp[j]=Math.max(dp[j], dp[j-j2*w]+j2*c); } } } } System.out.println(dp[m]); } }
0.0分
4 人评分
点我有惊喜!你懂得!浏览:2705 |
C二级辅导-阶乘数列 (C语言代码)浏览:614 |
程序员的表白 (C语言代码)浏览:1457 |
Biggest Number (C++代码)回溯法浏览:1611 |
A+B for Input-Output Practice (C++代码)浏览:605 |
数组输出 (C语言代码)错误???浏览:558 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:762 |
三角形 (C++代码)记忆化搜索浏览:1220 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:672 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:695 |