01背包问题(java实现)
来源:互联网 发布:学java好还是嵌入式好 编辑:程序博客网 时间:2024/06/05 05:13
状态转移方程:f[v]=max{f[v],f[v-w[i]]+v[i]}
f[v]为不放入第件物品背包的最大价值,f[v-w[i]]+v[i]为放入第i件物品的最大价值,v[i]第i件物品的价值,w[i]为第i件物品的体积
java实现(注解内为测试用例,程序第一行参数为个数,第二个参数为每个的重量(该用例重量也是价值)):
import java.util.Scanner;/* * 3072 3072 7168 3072 1024 */public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); int[] arr = new int[n]; int sum = 0; for (int i = 0; i < arr.length; i ++) { arr[i] = sc.nextInt() >> 10; sum += arr[i]; } // dp[j]表示在容量为j的情况下可存放的重量 // 如果不放arr[i]重量为dp[j],如果放arr[i]重量为dp[j-arr[i]]+arr[i]; int[] dp = new int[sum / 2 + 1]; for (int i = 0; i < n; i ++) { for (int j = sum / 2; j >= arr[i]; j --) { dp[j] = Math.max(dp[j], dp[j - arr[i]] + arr[i]); } } System.out.println(Math.max(dp[sum / 2], sum - dp[sum / 2]) << 10); } }}
0 0
- 01背包问题(java实现)
- 01背包问题(java实现)
- 01背包问题Java实现
- 01背包问题 java实现
- 背包问题-java实现
- 动态规划解决01背包问题(java实现)
- 01背包问题的java界面实现
- 【算法】01背包问题的Java实现
- 01背包问题(回溯法实现,java)
- 完全背包问题(Java实现)
- Java实现-背包问题I
- Java实现-背包问题II
- Java实现-背包问题VI
- 01背包问题-java
- Java 01背包问题
- 01背包问题 java
- 01背包问题--Java
- 01背包问题(回溯算法实现)
- Glib的数据类型和常用知识
- Ubuntu下安装Hadoophadoop-2.8.0(单机模式)
- Pandas 读写数据
- android listview工作原理的解析,带你到源码角度理解
- Unity3D 搭建优雅的UI框架
- 01背包问题(java实现)
- daemon not running. 解决办法 ADB调试桥 无法启动
- 算法导论 第二十五章 所有节点对的最短路径问题
- java自带线程池和队列详细讲解
- RecipientEditTextView在短信中的使用
- .net跨线程访问UI
- 字符串扩展
- SQL语句解析类型---硬解析和软解析
- 【windows】常见的系统环境变量,如%appdata%表示什么意思