acm-poj1050解题报告
2015-05-19 22:13
148 查看
题目地址:http://poj.org/problem?id=1050
题目大意:简单易懂,求一个最大为100*100矩阵中的子矩阵中元素之和的最大值
解题思路:说实话这道题算是DP,本人现在正在补,对DP还是不太熟悉,甚至还在网上参考了一些算法过程以及思路才写出的代码,最后终于AC了(笑)
首先,解这道题要有求最大子段和的基础,如给你一个数组a,求数组中a[i]+a[i+1]+...+a[j]的最大值
解法很简单,参考如下:
int b=0,sum=-100000000;
for(int i=0;i<n;i++)
{
if(b>0) b=b+a[i];
else b=a[i];
if(b>sum) sum=b;
}
再说本道题,主要思想为将其转化为一维数组求最大子段和,如果最优解左起第i列,右止于第j列,那么我们相当于把这些列的对应位加和,成为一列,
并对改列求最大子段和即可(降维思想)。
代码:
#include<cstdio>
#include<string.h>
#include<string>
#include<iostream>
using namespace std;
#define maxn 105
#define inf 0x3f3f3f3f
int array[maxn][maxn];
int f[maxn][maxn][maxn];
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++){scanf("%d", &array[i][j]);}
}
memset(f, 0, sizeof(f));
int ans=-inf;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int sum=0;
for(int k=j;k<=n;k++)
{
sum+=array[i][k];
f[i][j][k]=max(f[i-1][j][k]+sum,sum);//i是指行,j是起始列,k是终结列,f存的值为在ijk范围内的元素和最大值
ans=max(ans,f[i][j][k]);
}
}
}
cout<<ans<<endl;
return 0;
}
题目大意:简单易懂,求一个最大为100*100矩阵中的子矩阵中元素之和的最大值
解题思路:说实话这道题算是DP,本人现在正在补,对DP还是不太熟悉,甚至还在网上参考了一些算法过程以及思路才写出的代码,最后终于AC了(笑)
首先,解这道题要有求最大子段和的基础,如给你一个数组a,求数组中a[i]+a[i+1]+...+a[j]的最大值
解法很简单,参考如下:
int b=0,sum=-100000000;
for(int i=0;i<n;i++)
{
if(b>0) b=b+a[i];
else b=a[i];
if(b>sum) sum=b;
}
再说本道题,主要思想为将其转化为一维数组求最大子段和,如果最优解左起第i列,右止于第j列,那么我们相当于把这些列的对应位加和,成为一列,
并对改列求最大子段和即可(降维思想)。
代码:
#include<cstdio>
#include<string.h>
#include<string>
#include<iostream>
using namespace std;
#define maxn 105
#define inf 0x3f3f3f3f
int array[maxn][maxn];
int f[maxn][maxn][maxn];
int main()
{
int n;cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++){scanf("%d", &array[i][j]);}
}
memset(f, 0, sizeof(f));
int ans=-inf;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int sum=0;
for(int k=j;k<=n;k++)
{
sum+=array[i][k];
f[i][j][k]=max(f[i-1][j][k]+sum,sum);//i是指行,j是起始列,k是终结列,f存的值为在ijk范围内的元素和最大值
ans=max(ans,f[i][j][k]);
}
}
}
cout<<ans<<endl;
return 0;
}
相关文章推荐
- ACM--HDOJ2005解题报告
- ACM--HDOJ1201解题报告
- 杭电ACM题 1036 Edge解题报告
- 2014 ACM/ICPC 鞍山赛区现场赛 D&I 解题报告
- Codeforces Round #229 (Div. 2) C. Inna and Candy Boxes ACM解题报告(预处理)
- Flip and Shift -- ACM PKU 1063 解题报告
- 【Jason's_ACM_解题报告】Pie
- 【Jason's_ACM_解题报告】Open Credit System
- hdu 4762 && 2013 ACM/ICPC 长春网络赛解题报告
- 【ACM菜逼解题报告】Open Credit System
- 2011 ACM-ICPC 成都赛区解题报告(转)
- ACM/ICPC乌鲁木齐2017解题报告
- 【Jason's_ACM_解题报告】The Triangle(POJ1163)
- 【ACM菜逼解题报告】Broken Keyboard (a.k.a. Beiju Text)
- 【Jason's_ACM_解题报告】Mobile Computing
- 【Jason's_ACM_解题报告】Building for UN
- POJ 1006Biorhythms解题报告——生理周期——【PKU ACM】
- 2017 ACM天梯赛 古风排版 解题报告
- 2014 ACM/ICPC 北京赛区网络赛解题报告汇总
- Pku acm 3356 AGTC 动态规划题目解题报告(十)