int main() { int n; cin>>n; vector<vector<int>> vv(n); vector<vector<int>> dp(n); for(int i=0;i<n;i++){ dp[i].resize(n,-1); } for(int i=0;i<n;i++){ vv[i].resize(4); for(int j=0;j<4;j++){ cin>>vv[i][j]; } } //dp[i][j]表示的是: 已经选了j个red的情况下,从第i回合开始选红色或绿色,一直选,直到所有回合都选择完成所能获得的最大饱腹量 for(int i=n-1;i>=0;i--){ for(int j=0;j<=i+1;j++){ if(i==n-1){ //只剩下最后一个回合,返回两者最大值即可 dp[i][j]=max(j*vv[i][0]+(i-j)*vv[i][1],j*vv[i][2]+(i-j)*vv[i][3]); } else{ //此时到达的第i回合选红色的情况下,选到最后所能获取的最大饱腹量 int sr=j*vv[i][0]+(i-j)*vv[i][1]+dp[i+1][j+1]; //此时到达的第i回合选绿色的情况下,选到最后所能获取的最大饱腹量 int sg=j*vv[i][2]+(i-j)*vv[i][3]++dp[i+1][j]; //取两者最大值 dp[i][j]=max(sr,sg); } } } //返回从第0回合开始取,红色已经选了0个的情况下所能获取的最大饱腹量即是答案 cout<<dp[0][0]<<endl; return 0; }
点赞 评论

相关推荐

01-26 19:51
门头沟学院 Java
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务