题目
n棵树,开始有W元,第i棵树上有num[i]只鸟,第i棵树上的一只鸟要花c[i]元,每走一棵树增加x元,每买一个鸟会让钱包容量增加b,问最多能买到几只鸟?
解答
线性dp,状态f[i][j] ,j是当前拥有鸟的个数
f[i][j] = max{f[i-1][j-k]+X-w[i-1]*k
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 | #include <iostream> #include <cstring> using namespace std; const int N=1002; #define ll long long ll num[N],w[N],f[N][10002]; ll n,W,B,X; int main(){ ll i,j,k; ll ans=0,S=0; cin>>n>>W>>B>>X; for (i=1;i<=n;i++) cin>>num[i]; for (i=1;i<=n;i++) cin>>w[i]; for (i=0;i<=n+1;i++) for (j=0;j<=10000;j++) f[i][j]=-1; f[1][0]=W; for (i=2;i<=n+1;i++){ S+=num[i-1]; for (j=0;j<=S;j++) for (k=0;k<=min(j,num[i-1]);k++){ if (f[i-1][j-k]==-1) continue ; ll t=f[i-1][j-k]-w[i-1]*k; if (t>=0) f[i][j]=max(f[i][j],min(t+X,W+j*B)); } } for (j=0;j<=S;j++) if (f[n+1][j]>=0) ans=j; cout<<ans; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战