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

Day42 动态规划 part04

Day42 动态规划 part04

46. 携带研究材料(卡哥的卡码网的题目)

背包问题

我的思路:
写不了一点儿…T^T
总结规律就是,dp数组要比原来各个size + 1,dp[i][j] = Math.max(xxx, xxxx(根据题目情况进行各种处理))

解答:

import java.util.*;public class Main {public static void main (String[] args) {Scanner myScanner = new Scanner(System.in);int goodSize = myScanner.nextInt();int bagSize = myScanner.nextInt();int[] weight = new int[goodSize];int[] value = new int[goodSize];for(int i = 0; i < goodSize; i++) {weight[i] = myScanner.nextInt();}for(int i = 0; i < goodSize; i++) {value[i] = myScanner.nextInt();}BagProblem(weight, value, bagSize);}public static void BagProblem(int[] weight, int[] value, int bagSize) {int[][] dp = new int[weight.length + 1][bagSize + 1];for(int i = 1; i < dp.length; i++) {for(int j = 1; j < dp[0].length; j++) {if(j < weight[i - 1]) {dp[i][j] = dp[i - 1][j];}else {dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - weight[i - 1]] + value[i - 1]);}}}System.out.println(dp[dp.length - 1][bagSize]);}
}

416. 分割等和子集

我的思路:
笑死,已经学会抢答了!!
不管怎么样,模板是一把子背住了

		int[] dp = new int[xxx+ 1];for(int i = 0; i < dp.length; i++) {for(int j = xxx; j < xxx; j++) {dp[j] = Math.max(xxx, xxx);}}

题解思路应该是,数组之和的一半sum(nums)/2,dp数组是长度为 sum(nums)/2 + 1(总结规律,size + 1),从后向前(不一样了)不断比较并且更新最大值,如果dp数组最后一个值 == sum(nums)/2,那么就说明可以划分成两个和相等的子集

解答:

class Solution {public boolean canPartition(int[] nums) {int sum = Arrays.stream(nums).sum();if(sum % 2 != 0) {return false;}int target = sum / 2;int[] dp = new int[target + 1];for(int i = 0; i < nums.length; i++) {for(int j = dp.length - 1; j >= nums[i]; j--) {dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);}if(target == dp[target]) {return true;}}return target == dp[target];}
}
http://www.lryc.cn/news/331128.html

相关文章:

  • python set是什么类型
  • redis事务(redis features)
  • SpringBoot整合minio
  • 3090. 每个字符最多出现两次的最长子字符串
  • 26.活锁、饥饿锁
  • docker 安装nginx
  • 2024年阿里云新用户便宜购买云服务器攻略:5大细节助你降低购买成本
  • SSTI模板注入(jinja2)
  • ESP32学习---ESP-NOW(一)
  • C++核心高级编程 --- 3、函数提高
  • 【微服务篇】深入理解分布式消息队列系统
  • 基于k8s的web服务器构建
  • 【名词解释】ImageCaption任务中的CIDEr、n-gram、TF-IDF、BLEU、METEOR、ROUGE 分别是什么?它们是怎样计算的?
  • C++其他语法..
  • 【Vue3源码学习】— CH2.6 effect.ts:详解
  • C语言:文件操作(一)
  • 集中进行一系列处理——函数
  • git diff
  • 新手使用GIT上传本地项目到Github(个人笔记)
  • 结合《人力资源管理系统》的Java基础题
  • PostgreSQL备份还原数据库
  • 实现读写分离与优化查询性能:通过物化视图在MySQL、PostgreSQL和SQL Server中的应用
  • pytest中文使用文档----10skip和xfail标记
  • 【Spring MVC】快速学习使用Spring MVC的注解及三层架构
  • Python(乱学)
  • OpenHarmony实战:轻量级系统之子系统移植概述
  • Neo4j基础知识
  • HTTP/1.1 特性(计算机网络)
  • 每日一题————P5725 【深基4.习8】求三角形
  • 第三题:时间加法