博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1024_Max Sum Plus Plus
阅读量:5360 次
发布时间:2019-06-15

本文共 998 字,大约阅读时间需要 3 分钟。

题意:n个元素的数组,求分成m个不相交段的方法,使这m段之和最大,输出最大和

思路:dp,状态dp[i][j]表示前j个物品分成i段的最大和,

    状态转移方程:dp[i][j]=max(dp[i][j-1]+arr[j],max(dp[1][j-1]~dp[i-1][j-1] )+arr[j])

    决策:第j个物品①放入现有的i组合求和 ②成为第i组,与前面的i-1组求和

    数据量大,用一维数组压缩一下空间

代码:

#include
#include
#include
using namespace std;#define maxn 1001001#define inf 0x3f3f3f3fint dp[maxn];int maxpre[maxn];int arr[maxn];int m, n;int main() { while (scanf("%d %d", &m, &n) != EOF) { for (int i = 1; i <= n; i++) { scanf("%d", &arr[i]); dp[i] = 0; //maxpre[i] = -2; maxpre[i] = 0; } int mmax = -inf; maxpre[0] = 0; dp[0] = 0; for (int i = 1; i <= m; i++) { mmax = -inf; for (int j = i; j <= n; j++) { dp[j] = max(dp[j - 1] + arr[j], maxpre[j - 1] + arr[j]); //cout << dp[j] << endl; maxpre[j - 1] = mmax; mmax = max(mmax, dp[j]); } } printf("%d\n", mmax); }}
一开始把maxpre全设为无穷小,结果第二组样例小了1。。。

把dp值全打印出来,发现在状态转移的时候,dp[2]跟-1结合了,因为-inf太小。。。orz

转载于:https://www.cnblogs.com/Drenight/p/8611334.html

你可能感兴趣的文章
设计模式学习的好方法
查看>>
感谢Leslie Ma
查看>>
几种排序方法
查看>>
查看数据库各表的信息
查看>>
第一阶段测试题
查看>>
第二轮冲刺第五天
查看>>
图片压缩
查看>>
Hadoop-2.6.5安装
查看>>
教你如何一步步将项目部署到Github
查看>>
关于Android圆形图片的一种优化方案(可以显示网络图片)
查看>>
Windows路由表详解
查看>>
.NET性能优化方面的总结
查看>>
Windows下文件夹扩展名
查看>>
今天早上6:00起来,每天晚上回来6点多已经天黑
查看>>
debian开启cgroup memory子系统
查看>>
信息收集
查看>>
SQL Server 中使用Convert来取得datetime数据类型样式(全)
查看>>
Python中list的拷贝问题
查看>>
Java学习第二周学习笔记
查看>>
SQL基本语句
查看>>