题目链接:http://poj.org/problem?id=3017

题意:给你一个长度为n的数列,要求把这个数列划分为任意块,每块的元素和小于m,使得所有块的最大值的和最小

分析:这题很快就能想到一个DP方程 f[ i ]=min{ f[ j ] +max{ a[ k ] }}( b[ i ]<j<i,j<k<=i)     b[ i ]到 i的和大于m

这个方程的复杂度是O(n^2),明显要超时的(怎么discuss都说数据弱呢= =)

然后是优化了,首先当然是要优化一个最大值的队列,使得这个队列的队首元素的到当前位置的和不超过m,

这样一个可行解就是,f[ i ]=f[b[ i ]-1]+a[ q[ l ]](即队首元素的值),

这并不是最优解,所以还要找到队列中的最优解,一个可能的最优解只能是这样的

f[ q[ j ] ]+ a[ q[j +1 ]],也就是 a[ j ] 要大于后面的数,

很显然,如果a[ j ]小于后面的数,那么我们就可以将 a[ j ] 划分到后面去,而取得更优解

这里涉及的这个找最优解问题;

AC代码:

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = ;
LL num[N];
LL sum[N];
LL f[N];
int q[N];
int main() {
int n, i, j, st, ed, p;
LL m;
while(~scanf("%d%I64d", &n, &m)) {
memset(f, -, sizeof(f));
st = , ed = -;
p = ;
sum[] = ;
f[] = ;
for(i = ; i <= n; ++i) {
scanf("%I64d", num + i);
sum[i] = sum[i-] + num[i];// 统计前n项的和
if(st > ed) {
st = , ed = -;
q[++ed] = i;
}
while(st <= ed && num[i] >= num[q[ed]]) --ed;//单调队列优化
q[++ed] = i;
while(sum[i] - sum[p-] > m) ++p;
while(st <= ed && p > q[st]) st++;//单调队列里面保存的数已经被删除,则底部++;
if(st > ed) continue; //当前队列为空了,直接返回
if(f[p-] != -) //如果当前p位,有数;
f[i] = f[p-] + num[q[st]];
for(j = st + ; j <= ed; ++j) {
if(f[q[j]-] != -)
f[i] = min(f[i], f[q[j-]] + num[q[j]]);
}
}
printf("%I64d\n",f[n]);
}
return ;
}

最新文章

  1. C#使用ADO.NET访问数据库(一)
  2. [LeetCode] Minimum Moves to Equal Array Elements 最少移动次数使数组元素相等
  3. 使用VS+VisualGDB编译调试Linux程序
  4. for循环中i--的妙用 及 两变量互换数值的问题
  5. android view : window
  6. nullcon HackIM 2016 -- Crypto Question 1
  7. Windows 上的 Jetty 小工具
  8. 通过printf设置Linux终端输出的颜色和显示方式
  9. 最短路(Floyd_Warshall) POJ 2240 Arbitrage
  10. C/C++文件结构
  11. Lua 架构 The Lua Architecture
  12. linux修改主机名
  13. 层次查询start with ... connect by
  14. Eclipse使用技巧总结(二)
  15. 解决MVC模型验证在IE 6 7下不起作用或者报错
  16. poj3723 MST好题 kruskal
  17. iOS监听模式系列之通知中心
  18. WPF防止界面卡死并显示加载中效果
  19. JavaScript--鼠标滚动改变图片大小
  20. 课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 1、10个测验题(Neural Network Basics)

热门文章

  1. spring webflow
  2. ECMAScript 6(ES6)常用语法
  3. AI 语音对话技术
  4. mysql 5.7之后版本datatime 不允许设置 0000-00-00 00:00:00 的问题
  5. 工程web-inf 下文件,路径访问
  6. TestNG 一、 概论
  7. Apatche httpd + Django + Mysql web server 搭建
  8. 【转】maven常见问题问答
  9. 为 sublime text3 添加 github 上的插件
  10. 仿网易/QQ空间视频列表滚动连播炫酷效果