Editorial for Táo chuối
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này
Code mẫu của ladpro98
#include <bits/stdc++.h> const int N = 1505; const int oo = 1000000009; using namespace std; int F[N][N], up[N][N], down[N][N], u[N][N], d[N][N]; int m, n; int main() { scanf("%d %d\n", &m, &n); int i, j; char c = ' '; for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { while (c != 'A' && c != 'B') scanf("%c", &c); if (c == 'A') scanf("%d", &d[i][j]); else scanf("%d", &u[i][j]); scanf("%c", &c); } //scanf("\n"); } for(i=1; i<=m; i++) for(j=1; j<=n; j++) { down[i][j] = down[i][j-1] + d[i][j]; up[i][j] = up[i-1][j] + u[i][j]; } for(i=1; i<=m; i++) F[i][1] = 0; for(j=1; j<=n; j++) F[1][j] = 0; for(i=2; i<=m; i++) for(j=2; j<=n; j++) F[i][j] = max(max(F[i-1][j] + down[i][j-1], F[i][j-1] + up[i-1][j]), F[i-1][j-1] + down[i][j-1] + up[i-1][j]); cout << F[m][n]; return 0; }
Code mẫu của skyvn97
#include<bits/stdc++.h> #define MAX 1515 #define FOR(i,a,b) for (int i=(a),_b=(b);i<=_b;i=i+1) #define REP(i,n) for (int i=0,_n=(n);i<_n;i=i+1) using namespace std; int a[MAX][MAX],sa[MAX][MAX],sb[MAX][MAX],f[MAX][MAX],m,n; int readint(void) { char s[10]; scanf("%s",s); int sign=s[0]=='A'?-1:1; if (strlen(s)==2) return (sign*(s[1]-'0')); return (sign*(10*(s[1]-'0')+s[2]-'0')); } void init(void) { scanf("%d%d",&m,&n); FOR(i,1,m) FOR(j,1,n) a[i][j]=readint(); FOR(i,1,m) FOR(j,1,n) { sa[i][j]=sa[i][j-1]+(a[i][j]<0?-a[i][j]:0); sb[i][j]=sb[i-1][j]+(a[i][j]>0?a[i][j]:0); } } void optimize(void) { FOR(i,1,m) FOR(j,1,n) { if (i>1 && j>1) f[i][j]=f[i-1][j-1]+sa[i][j-1]+sb[i-1][j]; if (i>1) f[i][j]=max(f[i][j],f[i-1][j]+sa[i][j-1]); if (j>1) f[i][j]=max(f[i][j],f[i][j-1]+sb[i-1][j]); } printf("%d",f[m][n]); } int main(void) { init(); optimize(); int n; return (scanf("%d",&n)==1); }
Comments