1 条题解
-
0
C :
#include<stdio.h> int m,n,a[11][11]; int x,y,z; int f[11][11][11][11]; int my_max(int,int,int,int); int main() { // freopen("fgqs.in","r",stdin); // freopen("fgqs.out","w",stdout); scanf("%d",&n); while(1) { scanf("%d%d%d",&x,&y,&z); if(x==0&&y==0&&z==0) break; a[x][y]=z; } for(int i1=1;i1<=n;i1++) for(int j1=1;j1<=n;j1++) for(int i2=1;i2<=n;i2++) for(int j2=1;j2<=n;j2++) { f[i1][j1][i2][j2]=my_max(f[i1-1][j1][i2][j2-1], f[i1-1][j1][i2-1][j2], f[i1][j1-1][i2-1][j2], f[i1][j1-1][i2][j2-1]); f[i1][j1][i2][j2]+=a[i1][j1]; if(i1!=i2||j1!=j2) f[i1][j1][i2][j2]+=a[i2][j2]; } printf("%d",f[n][n][n][n]); } int my_max(int a,int b,int c,int d) { int tot=0; if(tot<a) tot=a; if(tot<b) tot=b; if(tot<c) tot=c; if(tot<d) tot=d; return tot; }
C++ :
#include <cstdio> using namespace std; int f[11][11][11][11]; int c[11][11]; int n; int main() { int n ; scanf("%d",&n) ; int a , b , t ; for (int i = 1 ; true ; i ++ ) { scanf("%d%d%d",&a,&b,&t); if (!a && !b && !t) break; else c[a][b]=t; } for (int i = 1 ; i <= n ; i ++ ) for (int j = 1 ; j <= n ; j ++ ) for (int k = 1 ; k <= n ; k ++ ) for (int p = 1 ; p <= n ; p ++ ) { f[i][j][k][p] = f[i-1][j][k-1][p]; if (f[i-1][j][k][p-1] > f[i][j][k][p])f[i][j][k][p] = f[i-1][j][k][p-1]; if (f[i][j-1][k-1][p] > f[i][j][k][p])f[i][j][k][p] = f[i][j-1][k-1][p]; if (f[i][j-1][k][p-1] > f[i][j][k][p])f[i][j][k][p] = f[i][j-1][k][p-1]; f[i][j][k][p] += c[i][j]; if(i != k || j != p) f[i][j][k][p] += c[k][p]; } printf("%d\n",f[n][n][n][n]); return 0; }
- 1
信息
- ID
- 837
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者