返回顶部

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;
    }
    
posted @ 2020-10-16 19:58  _Kolibri  阅读(106)  评论(0)    收藏  举报