首页 > 代码库 > 【codevs1043】 方格取数
【codevs1043】 方格取数
http://codevs.cn/problem/1043/ (题目链接)
题意
N*N的方格,每个格子中有一个数,寻找从(1,1)走到(N,N)的两条路径,使得渠道的数的和最大。
Solution
水题,${f[i][j][k][l]}$表示一条路走到(i,j),另一条路走到(k,l),取到的最大的数。
代码
// codevs1043#include<algorithm>#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<cmath>#include<queue>#define LL long long#define inf 2147483640#define MOD 10000#define Pi acos(-1.0)#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);using namespace std; const int maxn=20;int a[maxn][maxn],f[maxn][maxn][maxn][maxn],n,m;int main() { scanf("%d",&n); int u,v,w; while (scanf("%d",&u)!=EOF && u) { scanf("%d%d",&v,&w); a[u][v]=w; } 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++) { f[i][j][k][l]=max(max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]),max(f[i][j-1][k-1][l],f[i][j-1][k][l-1]))+a[i][j]+a[k][l]; if (i==k && j==l) f[i][j][k][l]-=a[i][j]; } printf("%d",f[n][n][n][n]); return 0;}
【codevs1043】 方格取数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。