3 条题解
-
1
#include<bits/stdc++.h> #define int long long const int inf = 0x3f3f3f3f; const int N = 51; using namespace std; int dp[N][N][N][N]; int a[N][N]; signed main(){ int n , m; 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 p = 1 ; p <= n ; p ++){ for(int q = 1 ; q <= m ; q ++){ int v = max(max(dp[i - 1][j][p - 1][q] , dp[i - 1][j][p][q - 1]) , max(dp[i][j - 1][p][q - 1] , dp[i][j - 1][p - 1][q])); if(i == p && j == q){ dp[i][j][p][q] = v + a[i][j]; }else{ dp[i][j][p][q] = v + a[i][j] + a[p][q]; } } } } } cout << dp[n][m][n][m]; return 0; }
-
1
传送门:题目详情 - 传纸条 - JMYSOJ (jmfes.com) #include <bits/stdc++.h> using namespace std;
int a[60][60]; int dp[60][60][60][60];
int main(){ int m, n; cin >> m >> n; for(int i = 1; i <= m; i ++){ for(int j = 1; j <= n; j ++){ cin >> a[i][j]; } } for (int i = 1; i <= m; i ++) { for (int j = 1; j <= n; j ++) { for (int p = 1; p <= m; p ++) { for (int q = 1; q <= n; q ++) { int v = max(max(dp[i - 1][j][p - 1][q], dp[i - 1][j][p][q - 1]), max(dp[i][j - 1][p][q - 1], dp[i][j - 1][p - 1][q])); if(i == p && j == q){ dp[i][j][p][q] = v + a[i][j]; } else { dp[i][j][p][q] = v + a[i][j] + a[p][q]; } } } } } cout << dp[m][n][m][n]; return 0; } // wo 1100 //luogu 1382
-
1
#include<bits/stdc++.h> using namespace std; int m,n,a[55][55],dp[110][55][55];
int main(){ cin>>m>>n; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) cin>>a[i][j];
for(int k=2;k<=m+n;k++){ for(int i1=1;i1<=m;i1++){ for(int i2=1;i2<=m;i2++){ int j1=k-i1, j2=k-i2; if(j1<1||j1>n||j2<1||j2>n) continue; int val=max({dp[k-1][i1][i2], dp[k-1][i1-1][i2], dp[k-1][i1][i2-1], dp[k-1][i1-1][i2-1]}); if(i1==i2) dp[k][i1][i2]=val+a[i1][j1]; else dp[k][i1][i2]=val+a[i1][j1]+a[i2][j2]; } } } cout<<dp[m+n][m][m]; return 0;
}
- 1
信息
- ID
- 524
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 107
- 已通过
- 19
- 上传者