P1004 方格取数 (双状态DP&四维DP)

P1004 方格取数 (双状态DP&四维DP)

题目传送门

思路:由于两个路径的最优值会互相影响,所以同时走选择最优方案才是正确解法,这样保证不会将一个数加两遍。若走两遍可能不是最优方案(因为第一次会影响第二次的方案)复杂度O(9^4)还是很小的。因为是滚动数组,所以可以降到三维,但没必要。

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[10][10][10][10],a[10][10];
int main(){
	int n,x,y,v;
	scanf("%d",&n);
		while(scanf("%d%d%d",&x,&y,&v)){
			if(!x&&!y&&!v) break;
			a[x][y]=v;
		}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			for(int k=1;k<=n;k++)
				for(int l=1;l<=n;l++)
				{		//取四种状态的最大值. 
					int tmp=max({dp[i-1][j][k-1][l],dp[i-1][j][k][l-1],dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]});
					dp[i][j][k][l]=tmp+a[i][j]+a[k][l];
					if(i==k&&j==l) dp[i][j][k][l]-=a[i][j];//去重 
				}
		printf("%d\n",dp[n][n][n][n]);
	return 0;
} 
全部评论

相关推荐

07-07 17:06
已编辑
深圳技术大学 golang
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-25 17:51
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务