4 状态机

简介: 4 状态机

1 大盗阿福

信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int f[N][2];
int main()
{
   int t;
   cin>>t;
   while(t--)
   {
       int n;
       cin>>n;
       memset(f,0,sizeof f);//清空上一维状态
       f[0][0]=0,f[0][1]=-0x3f3f3f3f;//前0个不抢的状态是0,抢的话不可能所以定义负无穷
       for(int i=1;i<=n;i++)
       {
           int a;
           cin>>a;
           f[i][0]=max(f[i-1][0],f[i-1][1]);//不抢
           f[i][1]=f[i-1][0]+a;//抢
       }
       cout<<max(f[n][0],f[n][1])<<endl;//输出抢或不抢的最大值
   }
   return 0;
}

2 股票买卖 IV

1057. 股票买卖 IV - AcWing题库

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=110;
int f[N][M][2],w[N];
int main()
{
  int n,k;
  cin>>n>>k;
  for(int i=1;i<=n;i++) cin>>w[i];
  memset(f,-0x3f,sizeof f);
  for(int i=0;i<=n;i++) f[i][0][0]=0;//表示前i天交易0次手里没股票是合法的方案
  for(int i=1;i<=n;i++)
    for(int j=1;j<=k;j++)
    {
       f[i][j][0]=max(f[i-1][j][0],f[i-1][j][1]+w[i]);
       f[i][j][1]=max(f[i-1][j][1],f[i-1][j-1][0]-w[i]);
    }
  int ans=0;
  for(int i=1;i<=k;i++) ans=max(ans,f[n][i][0]);//最后求一次前i天交易i次手里没股票的最大值
  cout<<ans<<endl;
   return 0;
}
/*滚动数组优化
#include<bits/stdc++.h>
using namespace std;
const int M=110;
int f[M][2];
int main()
{
  int n,k;
  cin>>n>>k;
  memset(f,-0x3f,sizeof f);
  f[0][0]=0;
  for(int i=1;i<=n;i++)
    {
        int w;
        cin>>w;
        for(int j=1;j<=k;j++)
       {
          f[j][0]=max(f[j][0],f[j][1]+w);
          f[j][1]=max(f[j][1],f[j-1][0]-w);
       }
    }
  int ans=0;
  for(int i=1;i<=k;i++) ans=max(ans,f[i][0]);
  cout<<ans<<endl;
   return 0;
}
*/

3 股票买卖V

309. 最佳买卖股票时机含冷冻期 - 力扣(LeetCode)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        auto &w=prices;//引用操作,也就是多一个名字
        int n=w.size(),f[5001][3];
        memset(f,-0x3f,sizeof f);
        f[0][2]=0;//因为入口相当于是前0天,手里没股票的2天
         for(int i=1;i<=n;i++)
         {
               f[i][0]=max(f[i-1][0],f[i-1][2]-w[i-1]);//手里有股票
               f[i][1]=f[i-1][0]+w[i-1];//手里没股票第一天
               f[i][2]=max(f[i-1][2],f[i-1][1]);//手里没股票大于1天
         }
         return max(f[n][1],f[n][2]);//最后求一次没股票的时候的最大价值
    }
};
/*滚动数组优化
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int f[3];
        f[0]=f[1]=-0x3f3f3f3f,f[2]=0;
         for(int i=0;i<prices.size();i++)
         {
             int temp0=f[0],temp1=f[1];
               f[0]=max(f[0],f[2]-prices[i]);
               f[1]=temp0+prices[i];
               f[2]=max(f[2],temp1);
         }
         return max(f[1],f[2]);
    }
};
*/
相关文章
|
uml
状态机
首先需要考虑涉及到哪些状态节点和哪些事件,如何方便状态节点的获取、状态节点如何串联起来呢?串联的方式下,如何拿到下一个状态节点?如果基于角色,如何实现? 我们知道工作流可以实现基于角色进行流程的流转,但是此时我们涉及到事件和状态,会出现多个分支,如果使用工作流实现,流程处理上,比如activiti上,可能比较复杂,因此考虑比较轻量级的状态机来实现的话,相对来说要方便一些。
1045 0
状态机
|
3月前
|
设计模式 JavaScript 安全
MobX状态管理:简洁而强大的状态机
MobX 是一种简洁高效的状态管理库,通过声明式的方式管理应用状态,使数据变化自动同步到视图。它利用 `@observable` 创建响应式数据,`@computed` 实现自动更新的计算属性,`@action` 确保状态安全变更。结合 `mobx-react`,可在 React 组件中使用 `observer` 自动响应状态更新。MobX 内部采用代理与访问者模式追踪依赖,确保最小化更新,提升性能。支持 TypeScript,提供类型安全与代码提示。
59 2
|
4月前
|
架构师 存储
软件交付问题之在设计领域模型和状态机时,模型和状态机,如何解决
软件交付问题之在设计领域模型和状态机时,模型和状态机,如何解决
|
4月前
|
测试技术
领域驱动设计问题之状态同步模型与状态机模型的主要区别是什么
领域驱动设计问题之状态同步模型与状态机模型的主要区别是什么
|
传感器 数据可视化 JavaScript
状态机(State Machines):理解、设计和应用有限状态机
状态机(State Machines)是一种强大的计算模型和设计工具,用于建模和控制有限状态的系统和行为。无论是在软件开发、自动化控制、游戏设计还是其他领域,状态机都发挥着关键作用。本博客将深入探讨状态机的概念、工作原理以及如何在不同应用中设计和应用它们。
5010 0
|
uml
UML——同步消息和异步消息的区别(顺序图中)
UML——同步消息和异步消息的区别(顺序图中)
1213 0
|
算法 Linux Android开发
c++状态机的使用
c++状态机的使用
|
存储 算法 异构计算
状态机的概念与设计
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
281 0
状态机的概念与设计
|
传感器 算法 安全
状态机设计举例
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
172 0
状态机设计举例
|
JavaScript 前端开发 API
Zag-基于状态机的组件库
本文适合对状态机感兴趣的小伙伴阅读
Zag-基于状态机的组件库