50分求助

P1854 花店橱窗布置

@[cannotdp](/user/190931) dp 数组开始要视为负无穷,这样就不会有不合法转移。 ```cpp #include <bits/stdc++.h> using namespace std; int n,m,ans; const int N=605; int a[N][N],f[N][N]; void print(int n,int m){ if(!n) return; for(int k=0;k<=m;k++){ if(f[n-1][k]+a[n][m]==ans){ ans=f[n-1][k]; print(n-1,k); printf("%d ",m); } } } signed main(){ memset(f,-63,sizeof f); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); int maxr=m-n+1;f[0][0]=0; for(int i=1;i<=n;i++){ for(int j=i;j<=maxr+i-1;j++){ for(int k=0;k<j;k++){ f[i][j]=max(f[i][j],f[i-1][k]+a[i][j]); } } } int L; for(int i=n;i<=m;i++){ if(f[n][i]>ans) ans=f[n][i],L=i; } printf("%d\n",ans); print(n,L); return 0; } ```
by 方123456 @ 2022-11-20 07:40:18


@[方123456](/user/128754) 感谢
by cannotdp @ 2022-11-20 11:11:29


|