HUD-1024-Max Sum Plus Plus DP+滚动数组
来源:互联网 发布:centos 7 mirror 编辑:程序博客网 时间:2024/05/17 14:15
题意
给定1-N个数 求m个连续不相交区间的最大值
思路
用DP求解
DP[i][j]表示前j个数分为i块的最大值
可得DP方程
DP[i][j]=max(DP[i][j-1]+a[j],max(DP[i-1][t])+a[j])
DP[i-1][t]表示i-1个分割的最大值
由于数据大 不能用二维数组 改用滚动数组
在i一定情况下 用b[j]表示DP[i][j]
pre[j]表示DP[i-1][t]中的最大值
所以DP方程可以改为:
b[j]=max(b[j-1]+a[j],pre[j-1]+a[j])//
#include <iostream>#include <cstdio>#include <algorithm>#include <cstdlib>#include <string.h>const int N = 1000005;const int Max = -9999999999;int a[N];//数组Sint b[N];//前J个最大和 带a[j]int pre[N];//前J个最大 不带a[j]using namespace std;int main(){ long long int m,n; int summax; while(cin>>m>>n){ b[0]=0; memset(pre,0,sizeof(pre)); for(int i=1;i<=m;i++) { summax = Max; for(int j=i;j<=n;j++) { if(i==1) scanf("%d",&a[j]); b[j] = max(b[j-1],pre[j-1])+a[j]; pre[j-1]=summax; summax = max(summax,b[j]);//循环到i++ } } cout<<summax<<endl; } return 0;}
0 0
- HUD-1024-Max Sum Plus Plus DP+滚动数组
- HDU 1024 Max Sum Plus Plus (DP·滚动数组)
- HDU - 1024 Max Sum Plus Plus(DP + 滚动数组)
- DP+滚动数组-HDU-1024-Max Sum Plus Plus
- HDU 1024 Max Sum Plus Plus DP+滚动数组
- HDU 1024 Max Sum Plus Plus【DP+滚动数组】
- 【hdu 1024】Max Sum Plus Plus —— dp && 滚动数组
- HDU 1024 Max Sum Plus Plus(普通dp && 滚动数组优化)
- hdu 1024 Max Sum Plus Plus(滚动数组)(DP)
- 【HDU 1024】Max Sum Plus Plus(DP+滚动数组优化+最大m段字段之和)
- DP ( 滚动数组 )——Max Sum Plus Plus ( HDU 1024 )
- Hdu 1024 Max Sum Plus Plus 动态规划+滚动数组
- hdu 1024 Max Sum Plus Plus (滚动数组 &&动态规划)
- hdu 1024 Max Sum Plus Plus--DP
- hdu 1024 Max Sum Plus Plus(dp)
- hdu-1024-Max Sum Plus Plus-DP
- hdu 1024 Max Sum Plus Plus(dp)
- hdu 1024 Max Sum Plus Plus dp
- 个人简介
- iOS经典讲解之Swift数据类型详解
- 关于12c升级11g catalog bug的处理
- [云快讯]《微软+Dell 打造一体化混合云系统》
- codeforces377B Modulo Sum(抽屉+dp)
- HUD-1024-Max Sum Plus Plus DP+滚动数组
- UVA - 11134 Fabled Rooks
- 各大工业机器人品牌大全
- java高并发,如何解决,什么方式解决
- codeblocks与opencv
- 海康威视IPCamera图像捕获 二种方法
- 矩阵顺序1
- ViewPager的实现:通过HorizontalScrollView
- Spark——并行计算框架