关注
dp1[i][j]表示从当前位置(i,j)开始,且此时不存在取反操作时获得的最大积分,也就是进入(i,j)时没有取反这个命令,但之后可能遇到0而取反,但是这不关(i,j)的事,因为之后无论何时遇到0,都属于(i,j)位置不取反的情况,即使(i,j)为0也符合这种情况。 同理dp2[i][j]表示从(i,j)开始,此时存在取反操作。 #include <iostream>
#include <vector>
using namespace std;
int main()
{
int n;
int w[n][3];
for(int i=0;i<n;i++)
cin>>w[i][0]>>w[i][1]>>w[i][2];
int dp1[n][3], dp2[n][3];
memset(dp1, 0,sizeof(dp1));
memset(dp2, 0, sizeof(dp2));
for(int i=0;i<3;i++){
dp1[n-1][i]=w[n-1][i];
dp2[n-1][i]=-w[n-1][i];
}
for(int i=n-2;i>=0;i--){
for(int j=0;j<3;j++){
int h1 =INT_MIN, h2=INT_MIN;
for(k=max(0,j-1);k<=min(2,j+1);k++){
if(w[i][j]){
dp1[i][j] =max(h1, w[i][j]+dp1[i+1][k]);
dp2[i][j] =max(h2, -w[i][j]+dp2[i+1][k]);
}else{
dp1[i][j] =max(h1, dp2[i+1][k]);
dp2[i][j] =max(h2, dp1[i+1][k]);
}
}
}
}
int res=INT_MIN;
for(int i=0;i<3;i++){
res=max(res,dp1[0][i]);
}
cout<<res;
} 没测试哈~
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客吐槽大会 #
29017次浏览 335人参与
# 一份好的简历长什么样? #
24115次浏览 441人参与
# 春节前,你还在投简历吗? #
1185次浏览 26人参与
# 春节提前走,你用什么理由请假? #
641次浏览 19人参与
# 春招什么时候投? #
359次浏览 10人参与
# 材料专业就业可以去哪些企业岗位 #
55149次浏览 379人参与
# 一上班就想____,这正常吗? #
17476次浏览 147人参与
# 刚入职就____,这样正常吗? #
127611次浏览 670人参与
# 校招入职后的感受 #
479167次浏览 3664人参与
# 现在还是0offer,延毕还是备考 #
1283682次浏览 7925人参与
# 设计人秋招体验最好的公司 #
81070次浏览 735人参与
# 招聘要求与实际实习内容不符怎么办 #
166530次浏览 922人参与
# 你觉得机械有必要实习吗 #
73603次浏览 487人参与
# 携程求职进展汇总 #
867097次浏览 5663人参与
# 找实习多的是你不知道的事 #
1790648次浏览 20673人参与
# 机械人选offer,最看重什么? #
158619次浏览 798人参与
# 设计人的面试记录 #
187627次浏览 1607人参与
# 我的秋招总结 #
280676次浏览 4334人参与
# 聊聊你的职场新体验 #
319540次浏览 1862人参与
# 为了减少AI幻觉,你注入过哪些设定? #
8979次浏览 230人参与
哔哩哔哩公司氛围 760人发布