zoukankan      html  css  js  c++  java
  • 【解题报告】洛谷P1719 最大加权矩形

    【解题报告】洛谷P1719 最大加权矩形

    题目链接

    https://www.luogu.com.cn/problem/P1719

    思路

    我们可以看出来,如果这个一维的话,实际上就是一个最大字段和的问题,所以我们还是两个思路,贪心和动态规划,只不过从加一个数字变成了加一列或者加一行

    我们可以用二位前缀和来算一行或者一列的东西吧

    1. 贪心

      #include <iostream>
      #include <cstdio>
      #include <algorithm>
      #include <cstring>
      #include <string>
      using namespace std;
      int n;
      int ans,a[125][125];
      int main()
      {
      	std::ios::sync_with_stdio(false);
      	cin>>n;
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=1;j<=n;j++)
      		{
      			cin>>a[i][j];
      			a[i][j]+=a[i-1][j];
      		}
      	}
      	for(int i=1;i<=n;i++)
      	{
      		for(int k=1;k<=i;k++)
      		{
      			int b[150]={0};
      			int f[150]={0};
      			for(int j=1;j<=n;j++)
      			{
      				b[j]=a[i][j]-a[i-k][j];
      				f[j]=max(f[j-1]+b[j],b[j]);
      				ans=max(ans,f[j]);
      			}
      		}
      	}
      	cout<<ans<<'
      ';
      	return 0;
      }
      
    2. 动态规划

      这里介绍一下动态规划的思路

      (f[i][j]) 表示从 ((1,1))((i,j)) 这个矩形之内的最大加权矩形,我们就有

      [f[i][j]=max(f[i-1][j]+line[i],f[i][j-1]+row[j],f[i-1][j-1]) ]

      其中 (s[i][j]) 表示二位前缀和, (row,line) 分别可以通过二维前缀和算出来

    代码的话?没有代码

    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    shell脚本100例、练习使用
    shell基础编程
    mysql基础理论知识
    Docker 基础
    python基础之类(面向对象编程)
    python基础之函数
    python基础之认知及编码
    python基础之数据类型
    python基础之注意事项
    1.linux使用基础
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15394869.html
Copyright © 2011-2022 走看看