dp段错了但是没有找出哪写错了

P1004 [NOIP2000 提高组] 方格取数

完整代码 ```cpp #include<bits/stdc++.h> using namespace std; int f[11][11][11][11]; int m[12][12]; int n; int a,b; int c; int main() { scanf("%d",&n); while(cin>>a>>b>>c && a) { m[a][b]=c; } 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][l-1],f[i-1][j][k-1][l]), max(f[i][j-1][k-1][l],f[i][j-1][k][l-1]))+m[i][j]+m[k][l]; if(i==k && j==l)f[i][i][j][k]-=m[i][j]; } } } } cout<<f[n][n][n][n]; return 0; } ``` 但是好像和其他关系不大
by acahv @ 2021-08-24 09:55:00


@[acahv](/user/557887) ```cpp #include<bits/stdc++.h> using namespace std; int n,x,y,val,ans=0,maxn,f[12][12][12][12],a[12][12]; int main(){ cin>>n; while(cin>>x>>y>>val){ if(x==0&&y==0&&val==0) break; a[x][y]=val; } 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(f[i-1][j][k-1][l],max(f[i][j-1][k-1][l],max(f[i-1][j][k][l-1],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]; } } } } cout<<f[n][n][n][n]; return 0; } ```
by 一SakuRa @ 2021-08-24 09:56:31


@[一SakuRa](/user/419519) 我看了好久没有看出什么差别,不知道是哪里细节出错了,难受
by acahv @ 2021-08-24 09:59:17


@[一SakuRa](/user/419519) 啊我懂了!
by acahv @ 2021-08-24 10:00:04


@[acahv](/user/557887) 我也挺迷的,没看出那不一样
by 一SakuRa @ 2021-08-24 10:00:05


@[acahv](/user/557887) 找到了
by 一SakuRa @ 2021-08-24 10:01:04


@[acahv](/user/557887) ```cpp if(i==k && j==l)f[i][i][j][k]-=m[i][j]; ```
by 一SakuRa @ 2021-08-24 10:01:26


@[一SakuRa](/user/419519) 啊啊啊啊啊啊这也太傻了 谢谢谢谢!!
by acahv @ 2021-08-24 10:02:20


@[acahv](/user/557887) 应该是 `f[i][j][k][l] -= m[i][j]` 吧。
by hank0402 @ 2021-08-24 10:02:23


@[acahv](/user/557887) ```cpp if(i==k && j==l)f[i][i][j][k]-=m[i][j]; ``` 改成 ``` if(i==k && j==l)f[i][j][k][l]-=m[i][j]; ```
by 一SakuRa @ 2021-08-24 10:02:43


| 下一页