蒟蒻求助,60分的四维dp

P1004 [NOIP2000 提高组] 方格取数

```cpp #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n,a[12][12],f[12][12][12][12]; int x,y,z; int ele_max(int a,int b,int c,int d) { a=max(a,b); a=max(a,c); a=max(a,d); return a; } int main() { cin>>n; cin>>x>>y>>z; while(x!=0||y!=0) { a[x][y]=z; cin>>x>>y>>z; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { for(int k=i+1;k<=n;k++) { for(int l=1;l<=n;l++) { f[i][j][k][l]=ele_max( f[i-1][j][k-1][l], f[i-1][j][k][l-1], f[i][j-1][k-1][l], f[i][j-1][k][l-1] ) +a[i][j]+a[k][l]; } } } } if(a[n][n]) f[n-1][n][n][n-1]+=2*a[n][n]; cout<<f[n-1][n][n][n-1]; } ```
by 绫小路帆波 @ 2019-09-30 06:18:44


我判重的方法是把一条路放在另一条路的上面,也就是k=i+1,这样可以得到最优解
by 绫小路帆波 @ 2019-09-30 06:19:50


@[绫小路帆波](/space/show?uid=245005) 你好像没有判断当i,j和k,l在一个点的时候只能取一次
by jxyzs @ 2019-09-30 08:18:08


@[绫小路帆波](/space/show?uid=245005) 其实这题和传纸条不一样,路线可以交叉。。。
by 老跳蛙 @ 2019-09-30 10:02:48


|