HDU-1024-DP-(滚动数组优化与状态转移)
来源:互联网 发布:mac软件卸载 编辑:程序博客网 时间:2024/05/16 00:47
关键是对状态转移的理解。
状态转移方程可以理解为
dp[i][j]=max(dp[i][j-1],dp[i-1][k])+a[j];
j是沿袭上一个串, 还是新立一个串(上一个串以k结尾,谁的值最大,谁就是k),取最大值。
当我们发现求dp[i-1][k]时需要一个for时,我们的心情是绝望的。。
并且发现要开的dp数组也很大。。
只能用两个数组来优化,我们发现不用for来求dp[i-1][k],在计算的时候,可以沿袭上一次的计算,本质是一个 dp[i][j],
的确值得好好看看。
至于这个队列为什么要从i开始,我一开始以为是和优化有关,可是也是很蒙蔽啊,如果是优化的话哪有一个循环就截前面一个数组的。
后来才发现,原来是酱紫。
因为dp[j]在i这个循环里是要 更新 字段为i时的值得。
而当时在更新之前 是 i-1的字段。
我们发现 如果 一个数的 位置小于i,那么他是如何也不能更新在有限的长度内实现 i字段的值的。(只有i能,小于i的元素,就算一个算一个字段,他们也是小于i的,不用更新.并且随着i的增加不能改变的越来越多。!!!!!)
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;const int maxn=100001;int main(){ //std::ios::sync_with_stdio(false); int m,n; int a[maxn]; while(cin>>m>>n) {for(int i=1;i<=n;i++) cin>>a[i]; int dp[maxn]; int maxx[maxn]; memset(dp,0,sizeof(dp)); memset(maxx,0,sizeof(maxx)); int ans=-2e17; int all=0; for(int i=1;i<=m;i++) { ans=-2e17; for(int j=i;j<=n;j++)//对小于i的数来说,新开一个串不会有任何影响,因为小于i,新开的串必然不能以他们开头, { dp[j]=max(dp[j-1],maxx[j-1])+a[j]; maxx[j-1]=ans; if(ans<dp[j]) ans=dp[j]; } //all=max(all,ans); } cout<<ans<<endl;} return 0;}
阅读全文
0 0
- HDU-1024-DP-(滚动数组优化与状态转移)
- hdu 3392(滚动数组优化dp)
- hdu 1024 dp滚动数组
- HDU 1024(DP+滚动数组)
- 【HDU 1024】Max Sum Plus Plus(DP+滚动数组优化+最大m段字段之和)
- hdu 1024(滚动数组优化)
- hdu 3392 利用滚动数组优化的dp
- HDU 4427 Math Magic【dp+优化+滚动数组】【好题】
- HDU - 1024 Max Sum Plus Plus(DP + 滚动数组)
- hdu 4576 Robot(dp+滚动数组)
- HDU 4576(概率DP+滚动数组)
- HDU 1024 Max Sum Plus Plus(普通dp && 滚动数组优化)
- HDU 4576 (2013杭州邀请赛J题-dp滚动数组优化)
- DP与滚动数组
- hdu 1513(dp+滚动数组)
- [SCU 4512] Goozy的积木 滚动数组,差值状态转移
- hihocoder#1044状态压缩dp+滚动数组
- HDU - 4991(树状数组优化 dp)
- 通讯录完全版(增删改查排序)
- java配置springMvc--springSecurity、jdbc
- Unity对于VR的支持
- 如何在spring boot中获取所有RequestMapping的URL路径列表集?
- 由浅入深理解java集合(五)——集合-Map
- HDU-1024-DP-(滚动数组优化与状态转移)
- 【几道题】Tarjan练习
- OSGEARTH 数据处理
- 前端组件库合集
- 【BaseFragment】基于MVP+Dagger2+Retrofit+Rxjava框架之BaseFragment
- python 读取文件列表
- 算法谜题72 标记方格2
- C++基础---无返回值函数(void函数)
- 2017年五月二十五日 NO.1 开始使用CSDN--了解MarkDown的语法