栓奶牛:二分更胜DP一筹
栓奶牛
解法一:二分
很明显题目说了:最小值最大,满足单调性,因此可以二分
解释一下:题目要求:距离最近的奶牛之间的距离尽可能大。那么也就是说,两头奶牛要尽量间隔的远一些,即间隔大一点,组数少一点。此时有一个小贪心,那就是第一个桩子肯定要选。我们二分题目所求的最大距离(间隔),如果这个间隔k,可行的话,我们要继续看再大一点可不可以,这就是l=mid+1;如果k不行,意味着,间隔太大了,那么我们要调小,就是r=mid-1;这就是所谓的单调性。
二分的复杂度是非常优秀的logn,完全不用担心时间。
Code:
#include <bits/stdc++.h>
using namespace std;int n,k,w[105];bool check(int x)
{int num=1,last=1;for(int i=2;i<=k;i++){if(w[i]-w[last]>=x){num++;last=i;} }if(num>=n) return 1;return 0;}
int main()
{cin>>n>>k>>w[1];for(int i=2;i<=k;++i){w[i]=w[i-1]+((w[i-1]*2357+137)%10+1);}int l=1,r=w[k],ans=0;while(l<=r){int mid=(l+r)/2;if(check(mid)){ans=mid;l=mid+1;}else r=mid-1;}cout<<ans;return 0;
}
解法二:DP
此题用DP也是可以的,只不过没有二分那么简单,但DP是相当工整的
首先,一维dp是不行的,我们要记录的无非是三种东西:看过的桩子数,选中的个数,以及最大距离,
所以用二维dp
f[i][j]表示看完了i个桩子后选中了j个桩子中距离最近的奶牛之间的最大距离
我们最后是需要得到f[k][n]的值
下面就是要找子任务,俗称“回头望月”
首先我们可以肯定的是他的子问题一定是f[x][j-1],即看到了x个桩子,选中了j-1个。那么x的范围也很好确定,最大不能超过i-1,因为选中了j-1个,所以最小不能小过j-1(这就是上面这张图)
现在我们来看对于每一个x怎么处理?首先明确f[x][j-1]存的是,看到了x个桩子,选中了j个桩子中,最近的奶牛之间间隔的最大值。
那么接下来要更新两个东西:最近的奶牛和他们的最大值
如果w[i]-w[x]<f[x][j-1],那么他就是那个最近的两头奶牛,假设值为minv
那么我们会得到很多个minv,所谓最小值最大,其实就是max_minv
Code:
#include <bits/stdc++.h>
using namespace std;
int n,k,w[105];
int f[105][105];int main()
{int maxv,minv;cin>>n>>k>>w[1];for(int i=2;i<=k;++i){w[i]=w[i-1]+((w[i-1]*2357+137)%10+1);}for(int i=1;i<=k;i++)for(int j=1;j<=n;j++)f[i][j]=20000;for(int i=2;i<=k;i++){for(int j=2;j<=i,j<=n;j++){maxv=-1;for(int x=j-1;x<=i-1;x++){minv=min(f[x][j-1],w[i]-w[x]);maxv=max(minv,maxv);}f[i][j]=maxv;}}cout<<f[k][n]<<endl;}
栓奶牛:二分更胜DP一筹相关推荐
- CodeForces - 1550E Stringforces(二分+状压dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...
- 鸿蒙 体验,华为鸿蒙OS全面上线,实际体验更胜EMUI11,安卓迎来“对手”
华为鸿蒙OS全面上线 2021年4月底,华为正式向部分花粉推送了鸿蒙OS开发者测试版,虽然没有覆盖到所有机型,但是这已经标志着备受期待的鸿蒙OS2.0版本全面上线了.自从去年九月份华为余承东宣布鸿蒙O ...
- 下载和中文攻略之更胜黎明前的琉璃色 夜明け前より瑠璃色な
夜明前的琉璃色=更胜黎明前的琉璃色=Brighter than Dawning Blue=夜明け前より瑠璃色な 故事讲述的是在很久很久以前,人们登上月球,在月球上建立了"斯菲阿国(スフィア国 ...
- 《更胜黎明前的琉璃色》简体中文汉化版安装包1.1 NSIS脚本
这次这补丁的安装包是赶出来的,真糟糕.不过至少能拿BMW3补丁的NSIS脚本作为基础来改,倒也没多麻烦. 这次有几个需求: 1.需要做splash 2.需要添加左侧的图片 3.需要播放背景音乐 4.需 ...
- 【bzoj1708】[USACO2007 Oct]Money奶牛的硬币 背包dp
题目描述 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的 ...
- Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp
传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...
- P4383 [八省联考 2018] 林克卡特树(wqs二分、树形dp)
解析 它还真的不难. 乐. 这题没做出来有些谔谔. 外层wqs二分显而易见,里面不知道为啥我总觉得这个题可以贪心. 然后一直试图在原树直径上下功夫,一筹莫展. 看到题解"dp"两个 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
[Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ...
- 【BZOJ1563】【NOI2009】—诗人小G(决策二分栈优化dp)
传送门 O(n2)dpO(n^2)dpO(n2)dp应该都会吧-- f[i]=min(f[j]+(sum[i]−sum[j]−L)pf[i]=min(f[j]+(sum[i]-sum[j]-L)^pf ...
最新文章
- 简单的c语言课程设计管理类,C语言课程设计-学生成绩简单管理程序.doc
- dede 表单必填_织梦dedecms自定义表单选项必填怎么修改
- asm.js的陷阱1
- Java开发小技巧(五):HttpClient工具类
- 王者荣耀全栈项目部署到阿里云服务器笔记
- [转]IIS的完整控制类
- java 代码造假_老板居然让我在Java项目中“造假”
- React开发(284):注意点击事件大小写
- ExtJS4.2学习(11)——高级组件之Grid
- 利用模态DIV结合UpdateProgress防止页面重复提交
- 60道计算机网络面试题(附答案,背诵版)
- JAVA连接SQL server2000解决方法
- Deepin安装搜狗中文输入法
- 单向链表中的数据排序问题
- 两款开关电源的纹波对比
- linux tcp 异常断开连接,TCP 异常断开
- ftp常见报错之Use PORT or PASV first解决思路和方法
- Jinja2渲染的两种方式
- 推荐给初学者:如何学好C语言?
- 评估方法(交叉验证法、自助法、留出法)
热门文章
- 基于SSM的在线音乐播放网站音乐网站MP3下载网站(idea-javaweb-php-netC#-j2ee-springboot)上传发布新歌分享评价收藏投票歌单歌手个性化每日推荐算法-排行榜
- solr 高并发_精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”...
- pyaudio安装失败的解决方法
- python爬取小说爬取_用python爬取笔趣阁小说
- python datetime 格式化_[已解决]Python中用strftime格式化datetime出错
- Python Pandas操作Excel表格文件:创建新表格,追加数据
- 我爱你,与你无关 【没有我的可怜人儿】
- 学习python需要多长时间?
- 基于国产智能芯片的IP摄像机产品方案
- 海信研发前端工程师面试经验总结