热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDUMaxSumPlusPlus(二维dp)

link题意:给你一个数组,有n个元素,选择m段两两没有没有交集的连续的段,输出这m段的和的最大值。dp[i][j]为j前面且包含j在内的数中选择i段的最大值,那么,dp[i][j

link

题意:给你一个数组,有n个元素,选择m段两两没有没有交集的连续的段,输出这m段的和的最大值。


dp[ i ][ j ] 为 j 前面且包含 j 在内的数中选择 i 段的最大值,那么,dp[ i ][ j ] = max(dp[ i ][ j - 1] , dp[ i - 1 ][ k] ) + a[ j ] ,(k

注意的是dp[ i ] [ j ] (i > j)这种状态都是没有意义的,要赋值为-inf。

#include
#define ll long long
using namespace std;
const int maxn = 1e6+10,inf = INT_MAX;
int a[maxn];
int dp[maxn],pre[maxn];
int main()
{
int n,m;
while(~scanf("%d%d",&m,&n))
{
for(int i=1;i<=n;i++)scanf("%d",a+i);
memset(dp,0,sizeof(dp));
memset(pre,0,sizeof(pre));
int mx = 0;
for(int i=1;i<=m;i++)
{
for(int j=i;j<=n;j++)
dp[j] = max(pre[j-1] , dp[j-1]) + a[j];
mx = -inf;
pre[i-1] = mx;
for(int k=i;k<=n;k++)mx = max(dp[k], mx),pre[k] = mx;
}
cout< }
}


推荐阅读
author-avatar
唯心-C_436
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有