P2096 最佳旅游线路

https://www.luogu.com.cn/problem/P2096
涉及知识点:贪心
黄色题
 
 
思路:

给定一个 n×m 的矩阵,每列选出一个最大值 a[i] ,然后求 a数列的最大字段和。

思路: 在林荫道上走并不会影响观赏值,所以只要把每列的最大值求出来就行了。


代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    scanf("%d %lld",&n,&m);
    int t[n+1][m+1];//记录输入的观赏价值。
    int dp[m+1];//记录每列的最大值。
    for(int i=1;i<=n;i++){
           for(int j=1;j<=m;j++) {
              scanf("%d",&t[i][j]);//千万不要边输入边取每列的最大值,很容易将行和列弄混 
          }
       }
    dp[0]=0;
    int maxn;
    for(int j=1;j<=m;j++){
        maxn=-2147483648;// -2147483648是int 的最小值。
        for(int i=1;i<=n;i++){//注意行和列 
            maxn=max(maxn,t[i][j]);//求最大值。
        }
        dp[j]=maxn;
    }
    int z[m+1];
    z[0]=0;
    maxn=-2147483648;
    for(int i=1;i<=m;i++){
        z[i]=max(z[i-1]+dp[i],dp[i]);//参考最大字段和那题。 //加上后一列的最大数或重新开一个新的区间 
        maxn=max(maxn,z[i]);
    }
    printf("%d",maxn);
    return 0;
}
 

 

posted @ 2022-07-15 19:00  -イレイナ  阅读(31)  评论(0)    收藏  举报