#写在前面
状态机描述的是一系列有顺序的事件
状态机可以把事件中的各个状态描述清楚
01背包对每个物品只有选与不选,这不是一个连续的过程
状态机描述的是一个过程,不是结果
先有几种状态(几个点),每个状态之间有一些有向边(通道),状态可以通过通道转换,每一次转换相当于走了一步。
当走过k步时,可以有很多种走法。
状态机和状态压缩dp是并列的两个知识点
##大盗啊福
https://www.acwing.com/problem/content/1051/
传统的思考方式

分解对于每个物品(每一步)的状态:

状态机的思考方式:

图论拆点
----c++版
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=100010,inf=0x3f3f3f3f;
int n;
int w[N],f[N][2];
int main(){
int T;cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&w[i]);
f[0][0]=0;f[0][1]=-inf;//入口指向0,虚拟边界不可选
for(int i=1;i<=n;i++){
//对于每个物品(每一步),都有两种状态
f[i][0]=max(f[i-1][0], f[i-1][1]);
f[i][1]=f[i-1][0]+w[i];
}
printf("%d\n", max(f[n][0]

本文深入探讨了状态机模型的概念及其在编程中的应用,通过多个C++实现案例,如大盗啊福、股票买卖等问题,详细解析了如何使用状态机解决实际问题。
最低0.47元/天 解锁文章
2565

被折叠的 条评论
为什么被折叠?



