链接: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2857
题目解析:
这是去年校赛的题目,当时没做出来,现在才补,真水,这题就是一个简单dp。
看第k个人画第m幅画的时候,要考虑两个时间,1.第k-1个人画完第m幅画的时间,2.第k个人画完第m-1幅画的时间。
这两个时间的最大者+t[m][k]就是第k个人画完第m幅画的时间。
代码如下:
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> #include <queue> #define inf 0x3f3f3f3f typedef long long ll; #define eps 1e-9 using namespace std; int n,m,t[50010][6]; int dp[50010][6]; int main() { int T; scanf("%d",&T); while(T--) { memset(t,0,sizeof(t)); scanf("%d%d",&m,&n); for(int i=1; i<=m; i++) { for(int j=1; j<=n; j++) { scanf("%d",&t[i][j]); } } memset(dp,0,sizeof(dp)); for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { dp[j][i]=max(dp[j][i],(max(dp[j][i-1],dp[j-1][i])+t[j][i])); } } printf("%d",dp[1][n]); for(int i=2; i<=m; i++) printf(" %d",dp[i][n]); printf("\n"); } return 0; }
时间: 2024-10-02 00:48:47