当前位置: 首页 > news >正文

江苏省政府网站集约化建设舆情信息范文

江苏省政府网站集约化建设,舆情信息范文,微信公众号微网站建设,做网站一个月需要多少钱背包类别 01背包:有n种物品,每种物品只有一个. 完全背包:有n种物品,每种物品有无限个. 多重背包:有n种物品,每种物品个数各不相同. 区别:仅仅体现在物品个数上的不同而已。 确定dp[i][j]数组的…

背包类别

01背包:有n种物品,每种物品只有一个.
完全背包:有n种物品,每种物品有无限个.
多重背包:有n种物品,每种物品个数各不相同.
区别:仅仅体现在物品个数上的不同而已。

确定dp[i][j]数组的含义:[0,i]的物品任取放容量为j的背包里.

LeetCode:1049. 最后一块石头的重量 II 

1049. 最后一块石头的重量 II - 力扣(LeetCode)

1.思路

01背包问题,dp[n + 1]初始化大小之所以是 n + 1 ,在于 n 是一个最大容量,且数组下标从 0 开始。
遍历顺序:先遍历物品再遍历背包,后者背包倒序是为了将物品大值先放入背包,保证每个物品只能遍历一次。
递推公式:取决于物品大小和背包容量,如果背包容量 > 物品大小,则允许放入(此时背包状态:dp[j - stones[i]] + stones[i]),否则不允许放入(此时背包状态:dp[j]),选择两者之中的较大值即可。

2.代码实现

 1// 一维似乎更好理解2class Solution {3    public int lastStoneWeightII(int[] stones) {4        int sum = 0;5        for (int num : stones) {6            sum += num;7        }8        int target = sum / 2;9        int[] dp = new int[target + 1];
10        for (int i = 0; i < stones.length; i++) {
11            for (int j = target; j >= stones[i]; j--) {
12                dp[j] = Math.max(dp[j], dp[j - stones[i]] + stones[i]);
13            }
14        }
15        return sum - 2 * dp[target];
16    } 
17}

3.复杂度分析

时间复杂度:O(n^2).
空间复杂度:O(n).

LeetCode: 494. 目标和 

494. 目标和 - 力扣(LeetCode)

1.思路

本题可以抽象成01背包问题,中间需要计算一下…
遍历顺序依旧是:先物品再背包,保证物品先放入最大值及元素的唯一性.
分两种情况:sum<0时,取绝对值之后进入遍历.

2.代码实现

 1class Solution {2    public int findTargetSumWays(int[] nums, int target) {3        int sum = 0;4        for (int num : nums) {5            sum += num;6        }7        if (target < 0 && sum < -target) return 0;8        if ((target + sum) % 2 != 0) return 0;9        int size = (target + sum) / 2;
10        if (size < 0) size = -size;
11
12        int[] dp = new int[size + 1];
13        dp[0] = 1;
14        for (int i = 0; i < nums.length; i++) {
15            for (int j = size; j >= nums[i]; j--) {
16                dp[j] += dp[j - nums[i]];
17            }
18        }
19        return dp[size];
20    }
21}

3.复杂度分析

时间复杂度:O(n^2).
空间复杂度:O(n).

LeetCode: 474.一和零  

474. 一和零 - 力扣(LeetCode)

1.思路

拆解将m和n共同看作背包的整体,字符串中每个元素看成物品。沿用上述遍历顺序和dp[][]数组定义,输出即可.

2.代码实现

 1class Solution {2    public int findMaxForm(String[] strs, int m, int n) {3        // dp[i][j] 表示i个0 和 j个1时的最大子集数4        int[][] dp = new int[m + 1][n + 1];5        int one;6        int zero;7        // 先遍历物品8        for (String str : strs) {9            one = 0;
10            zero = 0;
11            // 得出每个字符串元素中包含的0和1的个数
12            for (char ch : str.toCharArray()) {
13                if (ch == '0') {
14                    zero++;
15                } else {
16                    one++;
17                }
18            }
19            // 倒序遍历背包,保证每个字符串元素只会被用一次
20            for (int i = m; i >= zero; i--) {
21                for (int j = n; j >= one; j--) {
22                    dp[i][j] = Math.max(dp[i][j], dp[i - zero][j - one] + 1);
23                }
24            }
25        }
26        return dp[m][n];
27    }
28}

3.复杂度分析

时间复杂度:O(kmn). 空间复杂度:O(mn).

http://www.wangmingla.cn/news/47412.html

相关文章:

  • 企业网站备案意义青岛网络优化厂家
  • 学院网站开发网站定位长沙关键词优化新行情报价
  • 做网站设计的总结seo技术分享博客
  • 手机作网站服务器刷外链
  • 公司做企业网站成品网站建站空间
  • 物流网络规划名词解释唐山百度搜索排名优化
  • 新疆生产建设兵团工信委网站百度手机应用商店
  • 网站提示代码seo优化包括什么
  • 郑州网站个人开发哪些网站是营销型网站
  • 密云seo排名优化培训成都百度推广排名优化
  • 浙江新华建设有限公司网站网络广告的优势有哪些
  • 无刷新wordpress主题手机优化软件排名
  • 北京企业网站设计公司优化方案电子版
  • asp.net 制作网站开发公司网站模板设计
  • 定制开发电商网站建设公司廊坊关键词排名首页
  • 最好的建站平台seo实战视频
  • 广州知名网站建设网页设计服务网站优化技巧
  • 大规模网站开发语言网页制作流程
  • 西安手机网站建站磁力猫引擎入口
  • 个人可以做聊天网站备案吗百度推广费用一年多少钱
  • 可以建设彩票网站吗数据指数
  • 做自己的网站收费吗齐三seo顾问
  • 免费建站网站一级大陆在线看东莞排名优化团队
  • 昆明网站运营处理事件seo软件
  • wordpress更换主题 会有什么营销网站seo优化培训
  • 安阳市哪里做网站建设什么是网络营销推广
  • 河南省住房和城乡建设厅查询网站产品50个关键词
  • 百度做一个网站多少钱网络平台有哪些?
  • 开发一个b2c网站所需要长春网站优化页面
  • 网站前端切图做多个页面网址大全浏览器主页