1. 程式人生 > 實用技巧 >狀態機dp學習筆記_AcWing

狀態機dp學習筆記_AcWing

1.AcWing 1057 股票交易4

#include<bits/stdc++.h>
#pragma GCC optimize(2)
#define ll long long
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,n,a) for(int i=n;i>=a;i--)
#define endl '\n'
#define eps 0.000000001
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))
#define IO ios::sync_with_stdio(false);cin.tie(0);
using
namespace std; const int INF=0x3f3f3f3f; const ll inf=0x3f3f3f3f3f3f3f3f; const int mod=1e9+7; const int maxn=110+5; int a[maxn],dp[maxn][maxn][2]; int main(){ int n,m;cin>>n>>m; rep(i,1,n) cin>>a[i]; mem(dp,-INF); rep(i,0,n) dp[i][0][0]=0; rep(i,1,n){ rep(j,
1,m){ dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]+a[i]); dp[i][j][1]=max(dp[i-1][j][1],dp[i-1][j-1][0]-a[i]); } } int ans=0; rep(i,1,m){ ans=max(ans,dp[n][i][0]); } cout<<ans<<endl; }
View Code

2.AcWing 1058股票交易5

#include<bits/stdc++.h>
#pragma
GCC optimize(2) #define ll long long #define rep(i,a,n) for(int i=a;i<=n;i++) #define per(i,n,a) for(int i=n;i>=a;i--) #define endl '\n' #define eps 0.000000001 #define pb push_back #define mem(a,b) memset(a,b,sizeof(a)) #define IO ios::sync_with_stdio(false);cin.tie(0); using namespace std; const int INF=0x3f3f3f3f; const ll inf=0x3f3f3f3f3f3f3f3f; const int mod=1e9+7; const int maxn=1e5+5; int w[maxn],dp[maxn][3]; int main(){ int n;scanf("%d",&n); rep(i,1,n) scanf("%d",&w[i]); rep(i,0,n+2) dp[i][0]=dp[i][1]=-INF; rep(i,1,n){ dp[i][2]=max(dp[i-1][1],dp[i-1][2]); dp[i][1]=dp[i-1][0]+w[i]; dp[i][0]=max(dp[i-1][0],dp[i-1][2]-w[i]); } printf("%d\n",max(dp[n][1],dp[n][2])); }
View Code