动态规划
动态规划解题
九号新秀
这个作者很懒,什么都没留下…
展开
-
leetcode 62 不同路径 Java
题目链接 class Solution { // 先初始化第一行,在初始化第一列 public int uniquePaths(int m, int n) { int[][] dp = new int[n][m]; for (int i = 0; i < n; i++) { dp[i][0] = 1; } for (int i = 0; i < m; i++) { dp[0]原创 2020-12-09 09:32:16 · 114 阅读 · 0 评论 -
hdu 3466 ProudMerchants 01背包 Java
hdu 3466 ProudMerchants import java.util.ArrayList; import java.util.Comparator; import java.util.Scanner; class Item { int p; int q; int val; public Item(int p, int q, int val) { this.p = p; this.q = q; this.val =原创 2020-09-29 13:05:15 · 106 阅读 · 0 评论 -
hdu 2639 Bone Collector II 01背包 Java
hdu 2639 Bone Collector II 这题比较特殊,求的是第k优解,可以多加一维进行维护。 题目要求:获得相同骨骼值的两种方法是相同的。这意味着,这将是一个严格递减的序列从第一个最大值,第二个最大值…到第K个最大值。所以如果骨骼值相同,还需要进行判断去重。 import java.util.Scanner; /** * @author wangshaoyu */ public class Hdu2602BoneCollector { public static void m原创 2020-09-27 22:13:37 · 109 阅读 · 0 评论 -
hdu 1171 Big Event in HDU 01背包 Java
hdu 1171 Big Event in HDU 这道题将所有设施的总价值的一半作为背包容量,直接用01背包解决 import java.util.ArrayList; import java.util.Scanner; /** * @author wangshaoyu */ public class Hdu1171BigEventinHDU { public static void main(String[] args) { Scanner in = new Scanne原创 2020-09-27 19:56:03 · 85 阅读 · 0 评论 -
hdu 2546 饭卡 01背包 Java
hdu 2546 饭卡 贪心 加 01 背包 因为要使最后的余额最少,而且还需要大于等于5元才能购买,所以倒数第二次购买后的钱一定要大于或等于 (余额-5),因此背包容量就是 (余额-5)。 把最贵的留到最后进行购买。 import java.util.Arrays; import java.util.Scanner; /** * @author wangshaoyu */ public class Hdu2546 { public static void main(String[] arg原创 2020-09-27 19:13:29 · 183 阅读 · 0 评论 -
hdu 2955 Robberies 01背包 Java
hdu 2955 Robberies 这道题自己写得挺久,最坑的一点是自己一开始是用 StreamTokenizer 类读取的,但是一直错,后来用 Scanner 类读取就 accept 了,搞不懂。 解这道题有以下关键点: 第一:一开始想的是用概率来作为背包容量,但是概率是浮点数,所以只能用钱来作为背包容量。 第二:题目中给出的都是被抓的概率,概率之间应该是相乘而不是相加,与一般的01背包不一样。 第三:dp[0] 注意初始化为 1, 什么都不偷逃跑的概率为 1。 import java.io.IOExc原创 2020-09-26 22:57:22 · 100 阅读 · 0 评论 -
洛谷 P1048 采药 01背包模板题
洛谷 P1048 采药 01背包问题,每个物品只能拿一次,且与拿物品的顺序无关,相当于组合。 不想要第 i 棵树,和放不进去是一样的,价值和空间都没有变化,也就是前 i-1 棵树 j 时间的最大价值。 如果要第 i 棵树,前 i - 1 棵树 j - arr[i - 1][0] 时间的最大价值加上第 i 棵树的价值,因为需要给第 i 棵树留出空间,所以前面 i -1棵树就只剩下 j - arr[i -1][0]的空间了,所以这时候的价值就是 i - 1 棵树 j - arr[i - 1][0]时间加上第 i原创 2020-09-17 20:08:18 · 251 阅读 · 0 评论