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; }