For 70/90pts
查看原帖
For 70/90pts
1112408
2024ing楼主2025/7/28 18:02

需要暴力清空。
如果你的清空方法如下:

for(int i=1;i<=n;i++) for(int l=0;l<=k;l++) 
  dp[i][0][l]=dp[i][i+1][l]=-1e16;

这其实并不正确。 因为在下面:

for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for(int l=0;l<=k&&l<=i;l++) {
  dp[i][j][l]=max(dp[i-1][j][l],dp[i-1][j-1][l])+mp[i][j];
  if(l>0) dp[i][j][l]=max(dp[i][j][l],max(dp[i-1][j][l-1]+mp[i][j]*3,dp[i-1][j-1][l-1]+mp[i][j]*3));
}

注意到当 ll 取最大值的时候,
一定会从 dpi1,j,ldp_{i-1,j,l} 转移。
显然如果用上述清空方法会导致答案错误。

2025/7/28 18:02
加载中...