Pku acm 1050 To the Max 【动态规划】
来源:互联网 发布:java 策略模式运用场景 编辑:程序博客网 时间:2024/06/06 08:35
题目的意思很简单,在一个矩阵里面找它的子矩阵,使得子矩阵数值之和到达最大。其实就是最大子段和问题在二维空间上的推广。先说一下一维的情况吧:设有数组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(9-4-1),11(8+2+1),-10(-6-4+0),7(7+2-2)的最大子段和,ok,问题成功转化为一维的情况!
- Pku acm 1050 To the Max 【动态规划】
- acm pku 1050 To the Max的动态规划方法
- Pku acm 1050 To the Max 动态规划题目解题报告(十六)
- PKU ACM 1050- to the max
- POJ 1050-To the Max (动态规划)
- POJ 1050 To the Max -- 动态规划
- 【动态规划】[POJ 1050]To the Max
- pku 1050 To the Max
- PKU 1050 To the Max
- To The Max(动态规划)
- 1050pku To the Max 解题报告
- poj 动态规划之1050 To the Max
- hdu 1081 To The Max (动态规划)
- To the Max(动态规划DP)
- To the Max-动态规划 树状数组
- HDU 1081 To The Max 动态规划
- poj1050 To the Max (动态规划)
- 三维动态规划 To The Max
- Spring MVC快速上手教程
- 网页精华代码集(转载)
- Smarty缓存配置
- 使用UML做程序规划
- 百度(baidu)分词算法分析(一)
- Pku acm 1050 To the Max 【动态规划】
- 详析 Jackrabbit 各个模块 (四)
- 详析 Jackrabbit 各个模块 (三)
- 我的四年程序员之路
- 介绍下OSCache
- DWR框架入门
- 用Maven结合Eclipse开发appengine 应用程序
- 用Hudson作为持续集成工具
- 使用接口封装变化