通过一段时间的观察,预测到了未来 n天内某只股票的走势,第 i 天的股票买入价为每股 a[i],第 ii 天的股票卖出价为每股 b[i]
(a[i]>=b[i]),
规定第 ii 天的一次买入至多只能购买 as[i] 股,一次卖出至多只能卖出 bs[i] 股。
规定在两次交易(某一天的买入或者卖出均算是一次交易)之间,至少要间隔 W天,且一个人的手里的股票数不能超过 M。
假设有钱的数量充足(数目无限),但是没有任何股票,求n天后能赚到最多的钱
f[i][j] =max{ f[x][k] + (k-j) *a[i] }
f[i][j]= ....
f[i][j] = max{ f[i-W-1][k] + k* a[i] -j *a[i] } j-as[i] <k<j
f[i][j] =max( f[i-W-1][k] +k*b[i] -j*b[i] } j<k<j+bs[i]
提出 func(k) = f[i-W-1][k]+ k*array[i] ,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <iostream> #include <algorithm> #include <queue> #include <cstring> using namespace std; const int N=2004; int n,m,W,f[N][N]; int a[N],b[N], as [N],bs[N]; int func( int i, int k, int *arr){ int t=i-W-1; return f[t][k]+k*arr[i]; } int q[N],hh,tt; void solve(){ int i,j,k; cin>>n>>m>>W; memset(f,128, sizeof f); for (i=1;i<=n;i++) cin>>a[i]>>b[i]>> as [i]>>bs[i]; for (i=1;i<=n;i++){ for (j=0;j<= as [i];j++) f[i][j]= -j*a[i]; for (j=0;j<=m;j++) f[i][j]=max(f[i][j],f[i-1][j]); if (i<=W) continue ; hh=1,tt=0; q[++tt]=0 ; for (j=0;j<=m;j++){ while (hh<=tt&&q[hh]<j- as [i]) hh++; if (hh<=tt)f[i][j]=max(f[i][j],f[i-W-1][q[hh]]+q[hh]*a[i]-j*a[i]); while (hh<=tt&&func(i,q[tt],a)<=func(i,j,a)) tt--; q[++tt]=j; } hh=1,tt=0; q[++tt]=m; for (j=m;j>=0;j--){ while (hh<=tt&&q[hh]>j+bs[i]) hh++; if (hh<=tt)f[i][j]=max(f[i][j],f[i-W-1][q[hh]]+q[hh]*b[i]-j*b[i]); while (hh<=tt&&func(i,q[tt],b)<=func(i,j,b)) tt--; q[++tt]=j; } } int ans=-1e9; for (i=0;i<=m;i++) ans=max(ans,f[n][i]); cout<<ans<<endl; } signed main(){ solve(); } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!