1 条题解

  • 0
    @ 2025-8-24 22:14:08

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Gaode_Sean
    **

    搬运于2025-08-24 22:14:08,当前版本为作者最后更新于2022-02-12 16:39:09,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    对于这道题,先求出每一列的最大值,注意初始化为负无穷而不是 00

    设每一行的最大值为 aia_idpidp_i 表示以 aia_i 为结尾的最大字段和。

    转移方程:dpi=max(0,dpi1)+aidp_i=\max(0,dp_{i-1})+a_i

    最后的答案即是 =maxdpi=\max{dp_i}

    Code:

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,a[101][20001],b[20001],dp[20001],ans,mx;
    int main()
    {
    	cin>>n>>m;
    	m--;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++) cin>>a[i][j];
    	}
    	for(int i=1;i<=m;i++) b[i]=-1e9;
    	for(int j=1;j<=m;j++){
    		for(int i=1;i<=n;i++) b[j]=max(b[j],a[i][j]);
    	}
    	for(int i=1;i<=m;i++){
    		dp[i]=max(mx,dp[i-1])+b[i];
    		ans=max(ans,dp[i]);
    	}
    	cout<<ans;
    	return 0; 
    } 
    
    • 1

    信息

    ID
    4773
    时间
    1000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者