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]);
    }
};
*/
相关文章
|
存储 算法 安全
【密码学】非对称加密算法 - ECDH
由于 ECC 密钥具有很短的长度,所以运算速度比较快。到目前为止,对于 ECC 进行逆操作还是很难的,数学上证明不可破解,ECC 算法的优势就是性能和安全性高。实际应用可以结合其他的公开密钥算法形成更快、更安全的公开密钥算法,比如结合 DH 密钥形成 ECDH 密钥协商算法,结合数字签名 DSA 算法组成 ECDSA 数字签名算法。ECDH算法常常用来进行密钥的协商,协商好密钥后,用来解决上面的密钥分配问题,将对称加密的密钥安全的传到对端设备。算法加密/解密数字签名密钥交换RSA✅✅✅❌。
4617 0
|
11月前
|
安全 算法 网络安全
SSL/TLS协议是什么?
SSL/TLS协议是什么?
1146 57
|
存储 算法 安全
深入解析 X509Certificate:成员变量与方法详解
深入解析 X509Certificate:成员变量与方法详解
774 2
|
11月前
|
安全 Go 区块链
crypto
【10月更文挑战第29天】crypto
417 1
|
安全 Linux 应用服务中间件
在Linux中,SSL/TLS证书的作用以及如何在Linux中管理它们?
在Linux中,SSL/TLS证书的作用以及如何在Linux中管理它们?
|
IDE Java Maven
【Java】已解决:java.lang.NoSuchMethodError异常
【Java】已解决:java.lang.NoSuchMethodError异常
5973 0
|
传感器 数据可视化 JavaScript
状态机(State Machines):理解、设计和应用有限状态机
状态机(State Machines)是一种强大的计算模型和设计工具,用于建模和控制有限状态的系统和行为。无论是在软件开发、自动化控制、游戏设计还是其他领域,状态机都发挥着关键作用。本博客将深入探讨状态机的概念、工作原理以及如何在不同应用中设计和应用它们。
9414 0
|
算法 安全 网络安全
客户端如何验证ssl/tls证书的合法性
客户端是如何验证ssl/tls证书的合法性
1062 1
|
安全 网络协议 Java
TLS、SSL、CA 证书、公钥、私钥。。。今天捋一捋!
TLS、SSL、CA 证书、公钥、私钥。。。今天捋一捋!