jzoj3463-军训【双重嵌套二分,随机数据水法】

正题


大意

每个人有两个值gigihihi,要求将序列分解成连续的几个序列。要求每个序列最大的hihi的和小于Limt的情况下每个序列gigi的和的最大值最小。


解题思路

我们二分最小的gigi的和的最大值
首先一个O(n2)O(n2)的dp想法,用fifi表示分割到第i个时最大的hihi的和的最小值。
动态转移:

fi=min{f[j]+max{hj,hj+1,hj+2...hi1,hi}}fi=min{f[j]+max{hj,hj+1,hj+2...hi−1,hi}}

我们考虑如何优化,每次有新的max只会在产生更大的hihi时,于是我们可以用一个nextinexti表示最近的hnext>hihnext>hi,然后我们可以二分快速找到满足小于你目前二分到的答案的最小的位置。
时间复杂度O(n2+n  (log n)2)O(n2+n(logn)2)
是不是感觉时间复杂度没有变化,巧了!它就是A了


代码

#include<cstdio>
#include<algorithm>
#include<cstring>
#define H 20010
#define ll long long
using namespace std;
int n,h[H],g[H],z[H],next[H],num[H],tot;
ll sum[H],L,f[H],ans,l,r;
int find(int x,int need)//二分满足条件的最小值
{int l=x,r=n;while(l<r){int mi=(l+r)/2;if(sum[mi]-sum[x-1]>=need) r=mi;else l=mi+1;}return l;
}
bool check(int x)
{memset(f,127/3,sizeof(f));f[1]=0;for (int i=1;i<=n;i++)//dp{int k=find(i,x),y=i,add=h[y];if (sum[k]-sum[i-1]>x) k--;while(y<=k){f[y]=min(f[y],f[i]+add);add=h[y];y=next[y];}f[k+1]=min(f[k+1],f[i]+add);}return f[n+1]<=L;
}
int main()
{scanf("%d%lld",&n,&L);for(int i=1;i<=n;i++){scanf("%d%d",&h[i],&g[i]);sum[i]=sum[i-1]+g[i];}num[1]=n+1;z[1]=2147483647;tot=1;for (int i=n;i;i--)//暴力next数组{while (z[tot]<=h[i]) tot--;next[i]=num[tot];++tot;num[tot]=i;z[tot]=h[i];} l=1;r=sum[n];ans=r;while(l<=r)//二分{int mid=(l+r)>>1;if (check(mid)) {if (mid<ans)ans=mid;r=mid-1;}else l=mid+1;}printf("%lld",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件),附源码

本篇..基本可以算是Xamarin在应用开发过程中的核心了..真的很很很重要.. 想学习的..想用的..建议仔细阅读..嗯..打酱油的 ..快速滑倒下面点个推荐 - - 哈哈哈... 今天的学习内容? 只讲一个,关于Xamarin.Forms针对各个平台如何进行可定制化的控件操作. 也就是针对某个平台的…

笑脸喜迎新同学,热情送给新伙伴

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;????雄雄的小课堂????。”今天&#xff0c;于我和王老师来说&#xff0c;是个非同寻常的一天。那是因为&#xff0c;今天迎来了4班的40余位新同学们&#xff01;一大早&#xff0c;同学们就陆陆…

汇编语言(十三)之偶数转成哥德巴赫猜想

将输入的偶数转换成哥德巴赫猜想&#xff0c;输出哥德巴赫猜想 程序运行&#xff1a; 代码&#xff1a; datas segmentmaxESLen db 0ffhevenSLen db 0evenString db 0ffh dup(?)evenNumber dw ?prime1 dw 0 prime2 dw 0 i…

2018/7/19-纪中某C组题【jzoj3461,jzoj3462,jzoj3463,jzoj3464】

前言 第三题有毒&#xff0c;第四题改一下就是正解了qaq。 今日分数 Rankperson分数6蒟蒻1709lrz1509zyc1509xjq1509xxy15018hjq11034hzb1034lw10 正题 T1&#xff1a;jzoj3461-小麦亩产一千八【斐波那契数列】 博客链接&#xff1a;https://blog.csdn.net/mr_wuyongcong/a…

计算机入门的一些常用小技巧总结

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”今天总结了一些windows中常用的小技巧&#xff0c;也是明天上课需要演示的&#xff0c;希望对初入计算机行业的你们有所帮助&#xff0c;哈哈哈哈。常用shutdown命令&#xff1a;1.定时…

汇编语言(十四)之判断字符串是否包含数字

输入一串字符串&#xff0c;判断字符串里面是否包含数字&#xff0c;如果包含数字输出把cl的第五位设置为1&#xff0c;否则设置为0 程序运行&#xff1a; 代码&#xff1a; datas segmentSTRING_maxLength db 0ffhSTRING_Length d…

UnitOfWork知多少

1. 引言 Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.Unit of Work --Martin Fowler Unit Of Work模式&#xff0c;由马丁大叔提出&#xff0c;是一种数据访问模…

表扬几位积极的同学!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”这几天太忙了&#xff0c;几天才回家一次&#xff0c;总有忙不完的活在干。4班这几天同学们表现还不错&#xff0c;布置的作业都能按时完成&#xff0c;课堂上也比较活跃&#xff0c;比…

中山纪念中学培训15天总结

比赛 2018/7/6-纪中某C组题【jzoj1192,jzoj1397,jzoj1736】 上来就集体爆零 2018/7/7-纪中某C组题【jzoj1494,jzoj1495,jzoj1496,jzoj1497】 还比较好 2018/7/8-纪中某C组题【jzoj1619,jzoj1620,jzoj1621,jzoj1622】 发现了dp方面的不足 2018/7/9-纪中某B组题【jzoj1503…

汇编语言(十五)之找出两个数组中的相同元素

找出两个数组中的相同元素&#xff0c;并且输出 程序运行&#xff1a; 代码&#xff1a; datas segmentA dw -1,-2, 3, 4, 5, 6, 7, 8, 9, 10,-11, 12, 13, 14, 15ACount dw ($-A)/2B dw -1, 2,-3, 4,-5, 6,-7, 8, 9,-10, 11,-12, 13,-14, 15,16,17,18,…

如何编写更好的SQL查询:终极指南-第一部分

结构化查询语言&#xff08;SQL&#xff09;是数据挖掘分析行业不可或缺的一项技能&#xff0c;总的来说&#xff0c;学习这个技能是比较容易的。对于SQL来说&#xff0c;编写查询语句只是第一步&#xff0c;确保查询语句高效并且适合于你的数据库操作工作&#xff0c;才是最重…

汇编语言(十六)之三数值求和

输入A、B、C三个数&#xff0c;如果存在一个数为0&#xff0c;则全部清零&#xff0c;否则求和输出 程序运行&#xff1a; 代码&#xff1a; datas segmentA dw 1B dw 0D dw 3S dw 0a_string db 0ffh, 0 ,100 dup(?)b_string db 0ffh, 0 ,100 dup(?…

P4316-绿豆蛙的归宿【数学期望】

正题 评测记录&#xff1a;https://www.luogu.org/recordnew/lists?uid52918&pidP4316 大意 一个有限无环图&#xff0c;绿豆蛙从一个点走向任何一条出边的概率都是一样的&#xff0c;求起点到终点路径的期望长度。 解题思路 有向无环图&#xff0c;我们考虑在拓扑序上…

回忆四班的那些事儿~

10“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。”今天&#xff0c;谈谈四班的那些事儿吧~对于四班&#xff0c;回忆满满&#xff0c;根本忘却不了。和别的班一样&#xff0c;一个班内总有那么几个调皮捣蛋的孩子&#xff0c;只是四班…

C#使用Xamarin开发可移植移动应用进阶篇(7.使用布局渲染器,修改默认布局),附源码

本篇..基本可以算是Xamarin在应用开发过程中的核心了..真的很很很重要.. 想学习的..想用的..建议仔细阅读..嗯..打酱油的 ..快速滑倒下面点个推荐 - - 哈哈哈... 今天的学习内容? 也只讲一个,关于Xamarin.Forms针对各个平台如何进行可定制化的布局操作. 也就是针对某个平台…

汇编语言(十七)之判断三个数是否相等

输入三个数&#xff0c;计算相等数的个数 程序运行&#xff1a; 代码&#xff1a; datas segmenta db 0ffh, 0 ,100 dup(?)b db 0ffh, 0 ,100 dup(?)d db 0ffh, 0 ,100 dup(?) ARRAY dw 1,2,2inputA db input a$inputB db 0dh,0ah,i…

你想象中的实习是什么样的?

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;????雄雄的小课堂????。”今天感谢学长小李同学投稿的文章&#xff0c;在校外实习一年&#xff0c;可谓收获满满&#xff0c;下面就是李心焱同学的实习感悟&#xff0c;请欣赏&#xff01;实习…

P2280-激光炸弹【二维前缀和】

正题 评测链接&#xff1a;https://www.luogu.org/record/show?rid9634929 大意 有nn个东西,在5001&#x2217;5001" role="presentation">5001∗50015001∗5001的棋盘上&#xff0c;炸弹一次可以炸r∗rr∗r的地方&#xff0c;使炸到的东西的价值最大。…

汇编语言(十八)之求两个数的最大公约数

输入两个数&#xff0c;使用辗转相除法求最大公约数 程序运行&#xff1a; 代码&#xff1a; datas segmentM_max_len db 0ffhM_len db 0M_string db 100 dup(?)M dw 0 N_max_len db 0ffhN_len db 0N_string db…

Orleans—一些概念

这个文章聊一聊Orleans的概念.以下文章大部分翻译自官方教程,还有一些结合实际的应用经验,并对以前文章留下的坑进行填平.如果有哪个坑没有填,还请告诉我. Grain的生命周期: 一个Grain在逻辑上是永远存在的,并在逻辑上拥有一个不变的标识.程序的代码永远不会去创造或者销毁一个…