Codeforces Round #241 (Div. 2) B. Art Union (DP)

-
题意:有\(n\)个画家,\(m\)幅画,每个画家负责\(m\)幅画,只有前一个画家画完时,后面一个画家才能接着画,一个画家画完某幅画的任务后,可以开始画下一幅画的任务,问每幅画最后一个任务完成时的时间.
-
题解:这题可以用dp来写,当某个画家开始他的任务时,他的上一幅画的任务必须完成,并且他的前一个画家必须完成他的任务,我们用\(dp[i][j]\)表示第\(j\)个画家完成第\(i\)幅画任务时的时间,因为如果要合法的话,前面的两个条件都必须要满足,所以我们取两个状态的最大值,从而写出状态转移方程\(dp[i][j]=mxa(dp[i-1][j],dp[i][j-1])+dp[i][j]\).
-
代码:
int m,n; int dp[N][10]; int main() { //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); m=read(); n=read(); for(int i=1;i<=m;++i){ for(int j=1;j<=n;++j){ dp[i][j]=read(); } } for(int i=1;i<=m;++i){ for(int j=1;j<=n;++j){ dp[i][j]+=max(dp[i-1][j],dp[i][j-1]); } } for(int i=1;i<=m;++i){ cout<<dp[i][n]<<" "; } return 0; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮

浙公网安备 33010602011771号