栓奶牛

解法一:二分

很明显题目说了:最小值最大,满足单调性,因此可以二分

解释一下:题目要求:距离最近的奶牛之间的距离尽可能大。那么也就是说,两头奶牛要尽量间隔的远一些,即间隔大一点,组数少一点。此时有一个小贪心,那就是第一个桩子肯定要选。我们二分题目所求的最大距离(间隔),如果这个间隔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一筹相关推荐

  1. CodeForces - 1550E Stringforces(二分+状压dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,只包含前 kkk 个小写字母以及通配符 ???,现在可以将通配符替换成任意的前 kkk 个字母中的一个.设 f[i]f[i]f[i] 为 ...

  2. 鸿蒙 体验,华为鸿蒙OS全面上线,实际体验更胜EMUI11,安卓迎来“对手”

    华为鸿蒙OS全面上线 2021年4月底,华为正式向部分花粉推送了鸿蒙OS开发者测试版,虽然没有覆盖到所有机型,但是这已经标志着备受期待的鸿蒙OS2.0版本全面上线了.自从去年九月份华为余承东宣布鸿蒙O ...

  3. 下载和中文攻略之更胜黎明前的琉璃色 夜明け前より瑠璃色な

    夜明前的琉璃色=更胜黎明前的琉璃色=Brighter than Dawning Blue=夜明け前より瑠璃色な 故事讲述的是在很久很久以前,人们登上月球,在月球上建立了"斯菲阿国(スフィア国 ...

  4. 《更胜黎明前的琉璃色》简体中文汉化版安装包1.1 NSIS脚本

    这次这补丁的安装包是赶出来的,真糟糕.不过至少能拿BMW3补丁的NSIS脚本作为基础来改,倒也没多麻烦. 这次有几个需求: 1.需要做splash 2.需要添加左侧的图片 3.需要播放背景音乐 4.需 ...

  5. 【bzoj1708】[USACO2007 Oct]Money奶牛的硬币 背包dp

    题目描述 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统的货币系统中,硬币的面值通常是1,5,10,20或25,50,以及100单位的 ...

  6. Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

    传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi​表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...

  7. P4383 [八省联考 2018] 林克卡特树(wqs二分、树形dp)

    解析 它还真的不难. 乐. 这题没做出来有些谔谔. 外层wqs二分显而易见,里面不知道为啥我总觉得这个题可以贪心. 然后一直试图在原树直径上下功夫,一筹莫展. 看到题解"dp"两个 ...

  8. BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP

    [Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ...

  9. 【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 ...

最新文章

  1. 简单的c语言课程设计管理类,C语言课程设计-学生成绩简单管理程序.doc
  2. dede 表单必填_织梦dedecms自定义表单选项必填怎么修改
  3. asm.js的陷阱1
  4. Java开发小技巧(五):HttpClient工具类
  5. 王者荣耀全栈项目部署到阿里云服务器笔记
  6. [转]IIS的完整控制类
  7. java 代码造假_老板居然让我在Java项目中“造假”
  8. React开发(284):注意点击事件大小写
  9. ExtJS4.2学习(11)——高级组件之Grid
  10. 利用模态DIV结合UpdateProgress防止页面重复提交
  11. 60道计算机网络面试题(附答案,背诵版)
  12. JAVA连接SQL server2000解决方法
  13. Deepin安装搜狗中文输入法
  14. 单向链表中的数据排序问题
  15. 两款开关电源的纹波对比
  16. linux tcp 异常断开连接,TCP 异常断开
  17. ftp常见报错之Use PORT or PASV first解决思路和方法
  18. Jinja2渲染的两种方式
  19. 推荐给初学者:如何学好C语言?
  20. 评估方法(交叉验证法、自助法、留出法)

热门文章

  1. 基于SSM的在线音乐播放网站音乐网站MP3下载网站(idea-javaweb-php-netC#-j2ee-springboot)上传发布新歌分享评价收藏投票歌单歌手个性化每日推荐算法-排行榜
  2. solr 高并发_精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”...
  3. pyaudio安装失败的解决方法
  4. python爬取小说爬取_用python爬取笔趣阁小说
  5. python datetime 格式化_[已解决]Python中用strftime格式化datetime出错
  6. Python Pandas操作Excel表格文件:创建新表格,追加数据
  7. 我爱你,与你无关 【没有我的可怜人儿】
  8. 学习python需要多长时间?
  9. 基于国产智能芯片的IP摄像机产品方案
  10. 海信研发前端工程师面试经验总结