求大佬看看Orz WA了两个

P1006 [NOIP2008 提高组] 传纸条

求关 ```cpp #include<bits/stdc++.h> using namespace std; int m,n,f[115][55][55],vis[55][55]; int M(int a,int b,int c,int d){ return max(a,max(b,max(c,d))); } int main(){ cin>>m>>n; for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>vis[i][j]; } } for(int l=1;l<=m+n-1;l++){ for(int i=1;i<=m;i++){ for(int j=1;j<=m;j++){ if(l-i+1<1 || l-j+1<1 || l-i+1>n || l-j+1>n){ continue; } f[l][i][j]=M(f[l-1][i-1][j-1]+vis[i-1][l-i+1]+vis[j-1][l-j+1],f[l-1][i][j-1]+vis[i][l-i]+vis[j-1][l-j+1],f[l-1][i-1][j]+vis[i-1][l-i+1]+vis[j][l-j],f[l-1][i][j]+vis[i][l-i]+vis[j][l-j]); if(i==j) f[l][i][j]-=vis[i][l-i+1]; } } } cout<<f[n+m-1][m][m]; return 0; }
by AlexSong @ 2023-08-29 18:47:25


谢谢大佬
by 星弈小朋友 @ 2023-08-29 19:32:43


@[星弈小朋友](/user/536822) 帅哥你的行和列没分,分一下就过了,代码思路还是很棒的 ```c #include<bits/stdc++.h> using namespace std; int dp[60][60][60][60],a[60][60]; int main() { int m,n; cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=1;k<=n;k++) { for(int l=1;l<=m;l++) { dp[i][j][k][l]=max({dp[i-1][j][k-1][l],dp[i-1][j][k][l-1],dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]})+a[i][j]+a[k][l]; if(i==k&&l==j) dp[i][j][k][l]-=a[i][j]; } } } } cout<<dp[n][m][n][m]; return 0; } ```
by HUY1 @ 2023-10-05 10:44:04


Orz
by 星弈小朋友 @ 2023-10-05 14:02:12


|