洛谷 P1005 传纸条
作者:互联网
一道DP水题
状态:f[i][j][k][l]表示纸条1传到(i,j)位置,纸条2传到(k,l)位置时,所能获得的最大值,注意,因为题目说每个同学只帮传一次,所以(i,j)和(k,l)不能重合,所以l得从j+1枚举到m
状态转移方程:f[i][j][k][l]=max(max(f[i][j-1][k-1][l],f[i-1][j][k][l-1]),max(f[i][j-1][k][l-1],f[i-1][j][k-1][l]))+a[i][j]+a[k][l];
最后代码:
#include<bits/stdc++.h> using namespace std; int n,m,a[51][51],f[51][51][51][51]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&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=j+1;l<=m;l++){ f[i][j][k][l]=max(max(f[i][j-1][k-1][l],f[i-1][j][k][l-1]),max(f[i][j-1][k][l-1],f[i-1][j][k-1][l]))+a[i][j]+a[k][l]; } } } } printf("%d",f[n][m-1][n-1][m]); return 0; }
标签:P1005,洛谷,水题,int,max,纸条,51,传到 来源: https://www.cnblogs.com/Laehcim/p/10809952.html