二分法真的是说起来容易,做出来要命。概念就是一个有序的数列不断通过折半的方法找到所要求的数,因为不断对半,比一次查找在效率上快乐许多,二分法的思想是更快的一种找到符合答案的方法,举个例子就是在1到1000000里找个数使其符合一定条件,若是依次枚举,跑不了超时了,所以就通过对半查找的方法,也就是枚举法,通过每一次举例,都能将正确值的范围减半,1到1000000也不过是列举二十次,大大提高了枚举效率。
uva714和poj1064有着异曲同工之妙,品,细品。这两道题都应该去想到找出这个可能的答案,那么在众多的数中找到答案,就是二分了,这里的二分不再是找值了,而是找最优解。通过每一次判定,来断定,最优的区间在哪一段,从而找出最优解。二分法最开始定区间有的讲究,不过不难,对于题的理解后,很容易根据输入得到区间或是直接根据题意就定出来一个死的闭区间。之后就是不断的循环,循环的框架基本一致,之后对于区间的折半很重要,根据题意去确定哪种情况区间如何折半,这个一定要准,不然肯定凉了。这个折半的判断与题目的结合尤为重要,各种情况各种判断,不同的折半。直到找出唯一的最优解,就是这样。
本人poj714做法,二分法的实现以及与题意结合的每一个细节(输出的表达,各种情况以及返回值的不同,题意中多解的情况)都不能出错。就题实现二分法的亿点点细节都不能出错。

uva 714
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
long long int s[505];
int m,k;
int a1[505];
int a2[505];
int dinary(long long int ma)
{memset(a1,0,sizeof(a1));long long int sum=0;int j=0;for(int i=0;i<m;i++){if(s[i]>ma) return 0;}for(int i=m-1;i>=0;i--){sum+=s[i];if(sum>ma){j++;a1[i]=1;sum=s[i];}}if(j<=k-1){memset(a2,0,sizeof(a2));for(int i=0;i<=500;i++){a2[i]=a1[i];}int i=0;for(;j<k-1&&i<m;){if(a2[i]!=1){a2[i]=1;j++;}i++;}return 1;}else return 0;
}
int main()
{int n;cin>>n;while(n--){cin>>m>>k;long long int e=0;for(int i=0;i<m;i++){cin>>s[i];e+=s[i];}long long int b=1,mid;while(b<e){mid=(b+e)/2;if(dinary(mid)==1){e=mid;}else{b=mid+1;}}printf("%d",s[0]);if(a2[0]==1) printf(" /");for(int i=1;i<m;i++){printf(" %d",s[i]);if(a2[i]==1){printf(" /");}}printf("\n");}return 0;
}

又是二分法(uva714)相关推荐

  1. LeetCode 04寻找两个正序数组的中位数(困难)二分法

    题目描述: 呕心沥血的一个题解,点赞关注收藏,一键三联,一起加入我们打卡! 题目描述: 给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2. 请你找出这两个正序数组的中位数 ...

  2. 二分法分页 mysql_LeetCode 04寻找两个正序数组的中位数(困难)二分法

    呕心沥血的一个题解,点赞关注在看,一键三联,一起加入我们打卡!. 题目描述:呕心沥血的一个题解,点赞关注收藏,一键三联,一起加入我们打卡! 题目描述:给定两个大小为 m 和 n 的正序(从小到大)数组 ...

  3. 对二分法思想的体会 及 结队编程情况汇报

    算法课第二章作业 1. 对二分法思想的体会: 二分法是分治法的一种,当遇到大问题难以解决的时候,可以使用二分法将问题细化,提高效率,减小问题规模.例如二分搜索,有效率高的优点,但是这个优点的实现前提是 ...

  4. c++ 三维数组 初始化_013 JAVA 多维数组及数组的拷贝、冒泡排序、二分法查找...

    1.多维数组 多维数组的元素又是数组,可以有二维.三维.甚至更多维数组 1.1二维数组的声明: 数据类型 [][] = new 数据类型[一维长度][二维长度] public class Test01 ...

  5. 判断大小简单算法_算法浅谈——人人皆知却很多人写不对的二分法

    本文首发于公众号:TechFlow 1 二分法可以说是鼎鼎大名,哪怕是没有学过编程的同学,也许说不上来二分法这个名字,但是对于其中的精髓应该都是有所了解的.不了解的同学也没关系,我一句话就能交代清楚: ...

  6. 【二分法】POJ3258-River Hopscotch

    [抱大腿]啊啊啊又是一道恶心的题目!!!这道题是出在二分法里面的,因为这跟前面的一道青蛙过河的题特别像但是不一样,按照青蛙过河那个思路来走根本行不通,正好要按照跟那个思路相反的想法来想才行~ [题目] ...

  7. 遇事不决量子力学?二分法四象限了解一下

    使用二维四象限分析问题,可以让我们的思维更完整和辩证.二维四象限的"对立统一",就像转角看到爱,增加了角度才能看到事物的另一种形态,用多个维度去看待事物才能更接近真相. 有一天你正 ...

  8. 二分法 matlab应用,MATLAB算法の二分法

    从今起准备连续多期介绍一些常用的算法,通过不断实践"算法到程序"这一过程来学习matlab编程,久而久之就可做到熟能生巧. 今天要介绍的是二分法,它是一种古老且经典的.蕴含深刻哲理 ...

  9. [二分法]leetcode4:寻找两个有序数组的中位数(hard)

    题目: 题解: 又是一道hard题啊,这对于原来就很少做hard的我来说,可以说是很锻炼人了,坐下来静心思考,拿纸笔画结果,写推导过程,终于把这道题搞定了. 思路: 二分法,中位数就是将数组划分为长度 ...

  10. 每周算法讲堂,二分法

    (原文是发送到UESTCACM微信的,所以欢迎大家关注哦~ 大家好,我是萌萌的微信酱! 又到了一周一度难得的周三了哦,你们找到女朋友了吗?喵. 另外你们有没有想我呢? 众人:没有. 呜呜呜呜呜-- ( ...

最新文章

  1. 人工智能和机器学习领域有哪些有趣的开源项目
  2. 利用OpenCV求取图像的重心
  3. python神秘的魔法函数_Python魔法函数
  4. 一些极其简易的自动巡线车模
  5. 58. Length of Last Word
  6. 电脑端京东的我的订单html+css页面_什么是前端和后端开发?写给即将迈入前端开发领域的朋友...
  7. Python 列表 list() 方法
  8. h2 不能访问localhost_个人学习系列 - Spring Boot 整合 H2
  9. windows下的C/C++精确计时
  10. TypeScript 2.5 发布,增加语言级重构
  11. 王道计算机网络 传输层整理 超详细版
  12. BZOJ4471 : 随机数生成器Ⅱ
  13. sql如何行转列,列转行
  14. python同构数_用c语言求1到1000的同构数_后端开发
  15. Rename_suffix
  16. 过冲(overshoot)、下冲(Undershoot)的量化标准与评估实例
  17. 使用JS创建style标签
  18. paddle 41 在paddledetection添加RotateScaleCopyPaste数据增强方法
  19. 领域泛化(Domain Generalization)
  20. echarts地图扩展中国七大区,下转到区域下的各个省

热门文章

  1. 认知升级三部曲(深度好文)
  2. window10怎么设置共享计算机,Win10系统网络共享功能怎么用?Windows10网络共享功能使用方法...
  3. U3D教程宝典之两步实现超实用的XML存档
  4. Linux系统下搭建DNS服务器——原理总结
  5. 多选题如何做结构方程模型分析?
  6. 特此感谢!酷睿12、希捷硬盘、机械键盘……免费送大家
  7. HTML、CSS学习总结
  8. worldpress怎么增加登录注册按钮
  9. Wordpress 网站设计入门 联系表单设计
  10. DIY装机之入围产品