1 条题解
-
0
C++ :
//方法一:四维 #include<bits/stdc++.h> using namespace std; int dp[12][12][12][12],a[12][12]; int main() { int n,x,y,z; cin>>n; while(cin>>x>>y>>z&&x&&y&&z){ a[x][y]=z; } for(int x1=1; x1<=n; x1++){ for(int y1=1; y1<=n; y1++){ for(int x2=1; x2<=n; x2++){ for(int y2=1; y2<=n; y2++){ dp[x1][y1][x2][y2]=max(dp[x1-1][y1][x2-1][y2], max(dp[x1-1][y1][x2][y2-1], max(dp[x1][y1-1][x2-1][y2], dp[x1][y1-1][x2][y2-1]))) +a[x1][y1]+a[x2][y2]; if(x1==x2&&y1==y2){ dp[x1][y1][x2][y2]-=a[x1][y1];//多加了1次 } } } } } cout<<dp[n][n][n][n]<<endl; return 0; } /*分析 状态:dp[x1][y1][x2][y2](一个走到x1,y1,一个走到x2,y2的最大路径和) 转移方程: dp[x1][y1][x2][y2]=max(dp[x1-1][y1][x2-1][y2], max(dp[x1-1][y1][x2][y2-1], max(dp[x1][y1-1][x2-1][y2], dp[x1][y1-1][x2][y2-1]))) +a[x1][y1]+a[x2][y2]; 边界值:无 计算顺序 dp[1..n][1...n]从小到大 答案:dp[n][n][n][n] */
Pascal :
program fgqs; var a:array[0..100,0..100] of longint; f:array[0..100,0..100,0..100] of longint; i,j,n,x,y,t:longint; function max(b,c,d,e:longint):longint; begin if c>b then b:=c; if d>b then b:=d; if e>b then b:=e; exit(b); end; begin { assign(input,'fgqs.in'); assign(output,'fgqs.out'); reset(input); rewrite(output);} readln(n); readln(x,y,t); while (x<>0) and (y<>0) and (t<>0) do begin a[x,y]:=t; readln(x,y,t); end; f[1,1,1]:=a[1,1]; for i:=2 to n+n-1 do for x:=1 to n do for y:=1 to n do if (i+1-x>0) and (i+1-y>0) then begin f[i,x,y]:=max(f[i-1,x-1,y],f[i-1,x-1,y-1],f[i-1,x,y-1],f[i-1,x,y]); if x<>y then f[i,x,y]:=f[i,x,y]+a[x,i+1-x]+a[y,i+1-y]; if x=y then f[i,x,y]:=f[i,x,y]+a[x,i+1-x]; end; writeln(f[n+n-1,n,n]); {close(input); close(output);} end.
- 1
信息
- ID
- 825
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者