分两类讨论,取最大值即可。注意第 k+1 天作物会枯萎,所以收获时间必须 ≤k。
- 单次作物:只有售价 > 进价才种。第 1 天种,第 1+t 天收,收完马上重种。最大次数 c=⌊tk−1⌋,总利润 c×(q−p)。
- 持续作物:只买一次种子。第 1+t 天首收,之后每 s 天收一次。最大次数 c=1+⌊sk−1−t⌋,总利润 c×q−p。
注意开 long long。
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
| #include<bits/stdc++.h> using namespace std; typedef long long ll; void solve(){ int n,m; ll k,ans=0; cin>>n>>m>>k; for(int i=0;i<n;i++){ ll p,q,t; cin>>p>>q>>t; if(k>t&&q>p){ ll c=(k-1)/t; ans=max(ans,c*(q-p)); } } for(int i=0;i<m;i++){ ll p,q,t,s; cin>>p>>q>>t>>s; if(k>t){ ll c=1+(k-1-t)/s; ans=max(ans,c*q-p); } } cout<<ans<<"\n"; } int main(){ int T; cin>>T; while(T--)solve(); }
|