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

【算法提高:动态规划】1.4 状态机模型 TODO

文章目录

  • 例题列表
    • 1049. 大盗阿福(其实就是打家劫舍)
    • 1057. 股票买卖 IV(k笔交易)
    • 1058. 股票买卖 V(冷冻期)
    • 1052. 设计密码⭐⭐⭐🚹🚹🚹(TODO)
    • 1053. 修复DNA🚹🚹🚹🚹🚹(TODO)

例题列表

1049. 大盗阿福(其实就是打家劫舍)

https://www.acwing.com/activity/content/problem/content/1287/
在这里插入图片描述

就是 打家劫舍 那道题。

对当前的房间选择 抢 或者 不抢。

import java.io.BufferedInputStream;
import java.util.*;public class Main {public static void main(String[] args) {Scanner sin = new Scanner(new BufferedInputStream(System.in));int t = sin.nextInt();while (t-- != 0) {int n = sin.nextInt();int second = 0, pre = sin.nextInt();for (int i = 1; i < n; ++i) {int temp = pre;pre = Math.max(pre, second + sin.nextInt());second = temp;}System.out.println(pre);}}
}

1057. 股票买卖 IV(k笔交易)

https://www.acwing.com/problem/content/1059/

在这里插入图片描述

dp 数组多开一维表示第几笔交易就好了。

import java.io.BufferedInputStream;
import java.util.*;public class Main {public static void main(String[] args) {Scanner sin = new Scanner(new BufferedInputStream(System.in));int n = sin.nextInt(), k = sin.nextInt();int[] prices = new int[n];for (int i = 0; i < n; ++i) prices[i] = sin.nextInt();int[][] buy = new int[n][k], sell = new int[n][k];Arrays.fill(buy[0], -prices[0]);for (int i = 1; i < n; ++i) {buy[i][0] = Math.max(buy[i - 1][0], -prices[i]);sell[i][0] = Math.max(sell[i - 1][0], buy[i - 1][0] + prices[i]);for (int j = 1; j < k; ++j) {buy[i][j] = Math.max(buy[i - 1][j], sell[i - 1][j - 1] - prices[i]);sell[i][j] = Math.max(sell[i - 1][j], buy[i - 1][j] + prices[i]);}}System.out.println(sell[n - 1][k - 1]);}
}

1058. 股票买卖 V(冷冻期)

https://www.acwing.com/problem/content/1060/
在这里插入图片描述

限制 buy[i] 只能从 sell[i - 2] 转移过来就好了。

import java.io.BufferedInputStream;
import java.util.*;public class Main {public static void main(String[] args) {Scanner sin = new Scanner(new BufferedInputStream(System.in));int n = sin.nextInt();int[] buy = new int[n], sell = new int[n], prices = new int[n];for (int i = 0; i < n; ++i) prices[i] = sin.nextInt();buy[0] = -prices[0];buy[1] = Math.max(buy[0], -prices[1]);sell[1] = Math.max(sell[0], buy[0] + prices[1]);for (int i = 2; i < n; ++i) {buy[i] = Math.max(sell[i - 2] - prices[i], buy[i - 1]);sell[i] = Math.max(buy[i - 1] + prices[i], sell[i - 1]);}System.out.println(sell[n - 1]);}
}

1052. 设计密码⭐⭐⭐🚹🚹🚹(TODO)

https://www.acwing.com/activity/content/problem/content/1290/

在这里插入图片描述
|T| + 1 个状态自动机。

在这里插入代码片

1053. 修复DNA🚹🚹🚹🚹🚹(TODO)

https://www.acwing.com/activity/content/problem/content/1291/

在这里插入图片描述

在这里插入代码片
http://www.lryc.cn/news/104587.html

相关文章:

  • ip link add 命令
  • unity事件处理
  • 《ChatGPT原理最佳解释,从根上理解ChatGPT》
  • 大数据Flink(五十):流式计算简介
  • 13-4_Qt 5.9 C++开发指南_基于QWaitCondition 的线程同步_Wait
  • STM32(HAL)多串口进行重定向(printf函数发送数据)
  • 29_互联网(The Internet)(IP数据包;UDP;TCP;DNS;OSI)
  • xShell常用命令
  • React性能优化之Memo、useMemo
  • IDEA开启并配置services窗口
  • vue2企业级项目(三)
  • QT 在label上透明绘图
  • SAM(Segment Anything)大模型论文汇总
  • 金融翻译难吗,如何做好金融翻译?
  • Java面试题(Tomcat与Nginx)
  • React-使用mobx
  • LeetCode ACM模式——哈希表篇(一)
  • WPF实战学习笔记31-登录界面全局通知
  • 通用商城项目(中)
  • 谨慎使用JSON.stringify
  • 驱动开发day8
  • CAS 机制
  • #P1003. [NOIP2009普及组] 道路游戏
  • python-网络爬虫.regular
  • 手动搭建gateway,项目集成gateway实现Token效果
  • linux下SVN服务器搭建
  • 技术等级 TRL 定义
  • DHorse v1.3.0 发布,基于k8s的发布平台
  • Redis - 缓存的双写一致性
  • opencv03-Mat矩阵API的使用