Pku acm 1050 To the Max 动态规划题目解题报告(十六)
来源:互联网 发布:文华财经软件 编辑:程序博客网 时间:2024/05/20 19:19
http://acm.pku.edu.cn/JudgeOnline/problem?id=1050
题目的意思很简单,在一个矩阵里面找它的子矩阵,使得子矩阵数值之和到达最大。其实就是最大子段和问题在二维空间上的推广。先说一下一维的情况吧:设有数组a0,a1…an,找除其中连续的子段,使它们的和达到最大。假如对于子段:9 2 -16 2 temp[i]表示以ai结尾的子段中的最大子段和。在已知temp[i]的情况下,求temp [i+1]的方法是:
如果temp[i]>0 temp [i+1]= temp[i]+ai(继续在前一个子段上加上ai),否则temp[i+1]=ai(不加上前面的子段),也就是说 状态转移方程:
temp[i] = (temp[i-1]>0?temp[i-1]:0)+buf[i];
对于刚才的例子 temp: 9 11 -5 2,然后取temp[]中最大的就是一维序列的最大子段。求一维最大子段和的函数:
int getMax(int buf[100],int n)
{
int temp[101],max=n*(-127);
memset(temp,0,4*(n+1));
for(int i=1;i<=n;i++)
{
temp[i] = (temp[i-1]>0?temp[i-1]:0)+buf[i];
if(max<temp[i])
max=temp[i];
}
return max;
}
下面扩展到二维的情况:考察下面题目中的例子:
0 -2 -7 0
9 2 -6 2
-4 1 -4 7
-1 8 0 -2
我们分别用i j表示起始行和终止行,遍历所有的可能:
for(i=1;i<=n;i++)
for(j=i;j<=n;j++) {}
我们考察其中一种情况 i=2 j=4,这样就相当与选中了2 3 4三行,求那几列的组合能获得最大值,由于总是 2 3 4行,所以我们可以将这3行”捆绑”起来,变为求 4(
- Pku acm 1050 To the Max 动态规划题目解题报告(十六)
- Pku acm 1050 To the Max 【动态规划】
- acm pku 1050 To the Max的动态规划方法
- 1050pku To the Max 解题报告
- Pku acm 2250 Compromise 动态规划题目解题报告(六)
- Pku acm 1159 Palindrome 动态规划题目解题报告(七)
- Pku acm 2192 Zipper 动态规划题目解题报告(九)
- Pku acm 3356 AGTC 动态规划题目解题报告(十)
- Pku acm 1088 滑雪 动态规划题目解题报告(十五)
- Pku acm 1014 Dividing 动态规划题目解题报告(十七)
- Pku acm 1163 the Triangle 动态规划题目解题报告(一)
- Pku acm 1887 Testing the CATCHER 动态规划题目解题报告(十一)
- HDU 1081 To The Max-动态规划-[解题报告] C++
- Pku acm 1579 Function Run Fun 动态规划题目解题报告(二)
- Pku acm 2081 Recaman's Sequence 动态规划题目解题报告(三)
- Pku acm 1953 World Cup Noise 动态规划题目解题报告(四)
- Pku acm 1458 Common Subsequence 动态规划题目解题报告(五)
- Pku acm 1080 Humman Gene Function 动态规划题目解题报告(八)
- eXo Platform开始从门户转向Web OS
- 你的团队最佳人数是多少
- 程序员的灯下黑:不要忘记你的目标
- 日广告巨头看上博客 电通ADK合资专投博客
- 并行版本控制的好帮手--WinMerge
- Pku acm 1050 To the Max 动态规划题目解题报告(十六)
- 你的团队最佳人数是多少
- 报告两个CSDN Bugs.
- BI应用,使用开源的还是商业的?
- 当今职场上广为流传的十大精辟语录
- 程序员的灯下黑:能认识自己吗?
- C语言编程常见问题分析
- BI应用,使用开源的还是商业的?
- 驱动全球经济的六大趋势