CF416B题解

题目传送门

本题建议评橙。

前置芝士:dp\tt dp(基础)。

样例研究

4 2

2 5
3 1
5 3
10 1

在第一组 2 5 中,11 画家需要 22 时间来完成,此后 22 画家才能画 55 时间完成,总时间是 2+5=72+5=7

在第二组

2 5
3 1

中,画家 1122 时间画完第一幅画后,开始画第二幅画,画完的时间是 2+3=52+3=5

画家 22 则是在 77 时间之后才开始画第二幅画,用时 11,最终用时 88。所以 22 拖累了 11

第三组和第二组同理。

第四组中,画家 11 画完第四幅已经是 2020 了,而画家 22 画完第三幅仅仅只是 1313。这时画家 11 拖累了画家 22

由此,我们得出思路——

思路历程

到这里,我们发现这一题是个裸 dp\tt dp

既然是 dp\tt dp,那么就需要一个状态和状态转移方程。

状态方面,设 dpi,jdp_{i,j} 为画家 jj 在画完第 ii 幅画后用的时间。

那么状态转移方程显而易见:

dpi,j=maxdpi1,j,dpi,j1+ai,jdp_{i,j}=\max{dp_{i-1,j},dp_{i,j-1}}+a_{i,j}

最后写出代码,此题终。

#include<bits/stdc++.h>
using namespace std;
int a[50001][6],n,m,dp[50001][6];
int main(){
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	}
	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])+a[i][j];
		}
		cout<<dp[i][n]<<' ';
	}
	return 0;
}

时间复杂度 O(nm)\operatorname{O}(nm)n5n\leq5m50000m\leq50000,不会超时。

感谢各位在评论区 hack\tt hack 的大佬们~

posted @   Weslie_qwq  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示