news 2026/8/10 1:15:51

状态机dp

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
状态机dp

lc351

memo+回溯,状态标记+对称性优化

统计手机九宫格手势密码中长度在 [m,n] 范围内的有效模式总数

class Solution {
public:
bool st[9];
int cnt;
int ans;
int c_num;
int n1[16] = {0, 0, 0, 1, 2, 2, 2, 3, 5, 6, 6, 6, 7, 8, 8, 8};
int n2[16] = {2, 8, 6, 7, 0, 6, 8, 5, 3, 0, 8, 2, 1, 2, 0, 6};
int n3[16] = {1, 4, 3, 4, 1, 4, 5, 4, 4, 3, 7, 4, 4, 5, 4, 7};
bool check(int u, int i) {

if (st[i]) return false;
for (int j = 0; j < 16; j ++) {
if (u == n1[j] && i == n2[j] && !st[n3[j]]) return false;
}
return true;
}

void dfs(int u, int m, int n) {
st[u] = true;
if (c_num >= m && c_num <= n) ans ++;
for (int i = 0; i < 9; i ++) {
if (check(u, i)) {
c_num += 1;
dfs(i, m, n);
c_num -= 1;
}
}
st[u] = false;
}

int numberOfPatterns(int m, int n) {
memset(st, false, sizeof st);
if (n == 0) return 0;
if (n == 1) return 9;
cnt = 1;
c_num = 1;
int res = 0;
dfs(0, m, n);
res += ans * 4;
ans = 0;
dfs(1, m, n);
res += ans * 4;
ans = 0;
dfs(4, m, n);
res += ans;
return res;
}
};

lc1852

hash滑窗

vector<int> distinctNumbers(vector<int>& nums, int k)
{
int n=nums.size();
unordered_map<int,int> hash;
for(int i=0;i<k;i++)
{
hash[nums[i]]++;
}
vector<int> ret(n-k+1);
ret[0]=hash.size();
for(int i=1;i<n-k+1;i++)
{
int l=nums[i-1];
int r=nums[i+k-1];
if(--hash[l]==0)
hash.erase(l);
++hash[r];
ret[i]=hash.size();
}
return ret;
}
};

lc3573

用三个二维数组记录每天、至多k+1笔交易下的多仓、做空仓、空仓利润

遍历价格更新状态后取最终k+1笔交易空仓的最大利润

class Solution {

typedef long long ll;

public:

long long maximumProfit(vector<int>& prices, int k)

{

int n = prices.size();

const ll INF = LLONG_MIN / 2;

// f[i][j]: 第i天,j次交易后 多仓(买入持有)的最大利润

// g[i][j]: 第i天,j次交易后 做空仓(卖出待买回)的最大利润

// h[i][j]: 第i天,j次交易后 空仓的最大利润

vector<vector<long long>> f(n + 1, vector<ll>(k + 2, INF));

auto g=f;

auto h=f;

// 初始化:第0天,空仓利润为0

for (int j = 1; j <= k + 1; j++)

h[0][j] = 0;

for (int i = 0; i < n; i++) {

int p = prices[i];

for (int j = 1; j <= k + 1; j++) {

// 空仓状态更新:延续空仓 / 多仓平仓 / 做空仓平仓

h[i + 1][j] = max({h[i][j], f[i][j] + p, g[i][j] - p});

// 多仓状态更新:延续多仓 / 前一次空仓开多

f[i + 1][j] = max(f[i][j], h[i][j - 1] - p);

// 做空仓状态更新:延续做空仓 / 前一次空仓开空

g[i + 1][j] = max(g[i][j], h[i][j - 1] + p);

}

}

return h[n][k + 1];

}

};

lc188

三维 状态机dp

“买/卖状态数组”记录每天最多k次交易后的持仓/空仓利润,先优化k的上限,再遍历价格更新状态,最后取空仓的最大利润

&看题解学到了斜率优化dpദ്ദി˶˃ ᵕ ˂ )✧!

class Solution {
public:
int maxProfit(int k, vector<int>& prices)
{
int n=prices.size();
//题目 给的 k 可能过大
k=min(k,n/2); //处理一下,优化空间

vector<vector<int>> f(n,vector<int>(k+1,-0x3f3f3f3f));
auto g=f;//卖出

g[0][0]=0;//sale
f[0][0]=-prices[0];//buy

for(int i=1;i<n;i++)
{
for(int j=0;j<=k;j++)
{
f[i][j]=max(f[i-1][j],g[i-1][j]-prices[i]);
g[i][j]=g[i-1][j];
if(j-1>=0)
g[i][j]=max(g[i-1][j],f[i-1][j-1]+prices[i]);
}
}
int ret=0;
for(int j=0;j<=k;j++)
{
ret=max(ret,g[n-1][j]);
}
return ret;
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/8 8:40:36

开题报告不是“过关文档”,而是科研蓝图的“第一次心跳”——宏智树AI如何让模糊想法长出逻辑骨架?

在研究生生涯的起点&#xff0c;有一份被严重误解的文档&#xff1a;开题报告。 它常被当作“流程性任务”——凑字数、套模板、赶在截止前交差。 但真正懂科研的人知道&#xff1a;开题报告不是用来“通过”的&#xff0c;而是用来“思考”的。 它是你与自己研究计划的第一次…

作者头像 李华
网站建设 2026/8/9 2:21:39

二叉树输出(btout)(信息学奥赛一本通- P1366)

【题目描述】树的凹入表示法主要用于树的屏幕或打印输出&#xff0c;其表示的基本思想是兄弟间等长&#xff0c;一个结点的长度要不小于其子结点的长度。二叉树也可以这样表示&#xff0c;假设叶结点的长度为1&#xff0c;一个非叶结点的长度等于它的左右子树的长度之和。一棵二…

作者头像 李华
网站建设 2026/8/9 19:21:32

写论文软件哪个好?别被“秒出全文”迷惑——真正能陪你从开题到答辩的,只有它把AI当“科研协作者”,而非“代笔枪手”

“写论文软件哪个好&#xff1f;” 这个问题在毕业季刷爆高校论坛。 你点开推荐列表&#xff0c;满屏都是&#xff1a;“3分钟生成万字论文”“导师看不出是AI写的”“毕业无忧神器”…… 但真相是—— 这些工具生成的“论文”&#xff0c;往往文献是编的、图是假的、数据是幻…

作者头像 李华
网站建设 2026/8/9 21:17:53

从手动编写到AI生成:Redux开发效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请分别用传统手动编写和使用AI生成两种方式实现相同的Redux功能&#xff1a;用户认证系统。要求包含&#xff1a;登录、登出、token刷新、权限验证等功能。完成后请对比两种方式的代…

作者头像 李华
网站建设 2026/8/9 16:45:16

3分钟快速搭建MySQL8开发环境:Docker极简方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 请设计一个极简的Docker MySQL8开发环境方案&#xff0c;要求&#xff1a;1. 最简配置(单容器) 2. 预置常用配置 3. 包含示例数据库 4. 一键启动脚本 5. 快速连接指南 6. 资源占用最…

作者头像 李华
网站建设 2026/8/9 8:02:49

使用帧加载vue组件

背景首页渲染页面的时候&#xff0c;因为加载的元素特别多&#xff0c;页面会出现白屏解决方案使用浏览器的API requestAnimationFrame&#xff0c; 比如每一帧加载一个组件&#xff0c;依次加载所有的组件举例说明目录结构components--HeavyComp.vue APP.vue useDefer.jsuseDe…

作者头像 李华