【解题报告】洛谷P1719 最大加权矩形
【解题报告】洛谷P1719 最大加权矩形
题目链接
https://www.luogu.com.cn/problem/P1719
思路
我们可以看出来,如果这个一维的话,实际上就是一个最大字段和的问题,所以我们还是两个思路,贪心和动态规划,只不过从加一个数字变成了加一列或者加一行
我们可以用二位前缀和来算一行或者一列的东西吧
-
贪心
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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<<'\n';
return 0;
} -
动态规划
这里介绍一下动态规划的思路
设 表示从 到 这个矩形之内的最大加权矩形,我们就有
其中 表示二位前缀和, 分别可以通过二维前缀和算出来
代码的话?没有代码
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wweiyiのblog!
评论
