题意:k份书稿分成m份,使得每份的和最小
思路:典型最大值最小化问题,使用贪心+二分。贪心的是每次尽量将元素往右边划分,二分查找最小的x满足m个连续的子序列和S(i)都不超过x。
因为输出的原因,在划分时就从后往前尽量划分。
#include
#include
#include
#include
using namespace std;
typedef long ...
分类:
其他好文 时间:
2014-07-31 13:29:27
阅读次数:
178
两个都是最长上升子序列,所以就放一起了1631 因为长度为40000,所以要用O(nlogn)的算法,其实就是另用一个数组c来存储当前最长子序列每一位的最小值,然后二分查找当前值在其中的位置;如果当前点不能作为当前最长子序列的最大值,则更新找到值为两者间的较小值。2533 就是一个裸的最长上升子序列...
分类:
其他好文 时间:
2014-07-30 20:13:04
阅读次数:
230
TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中可以有较好的性能。该算法最初是由Tim Peters于2002年在Python语言中提出的。 TimSort 是一个归并排序做了大量优化的版本。对归并排序排在已经反向排好序的输入时表现O(n2)的特点做了特别优化。对已经正向排好序的输入减少回溯。对两种情况混合(一会升序,一会降序)的输入处理比较...
分类:
编程语言 时间:
2014-07-30 14:49:53
阅读次数:
805
归并排序的链表法#includeusing namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution{public:...
分类:
其他好文 时间:
2014-07-30 07:40:23
阅读次数:
174
题目地址:POJ 2299
今天下午的多校看来没有白做。。。实在做不出题闲着无聊看小白鼠学会了个归并排序。哈哈。
归并排序简单地说其实就是先分成一个二叉树直至单个,然后依次从最底层不断进行合并,逆序对数就是在合并的过程中,加入后面的那段中到了比他大的时候,那后面的那些就都是比他大的,都是逆序对数,所以直接加上即可。网上资料很多,就不细说了。。用了分治的思想。
自己根据理解写的代码,考虑的太不...
分类:
其他好文 时间:
2014-07-29 22:01:21
阅读次数:
289
用二分查找来找到一个X使得满足X!%M==0
M=a1^b1*a2^b2*a3^b3…*an^bn
X!=1*2*3*4*5....*X;
M可以化为其个个质因子的k次方的乘积
例如 2^3*3^2*4^5==2^13*3^2;
X!则可以得到
例如 2的次方为
X! = 2^(X/2)*(1*2*3*4*5*6*7....*X/2)*other=(x/2)! *othe...
分类:
其他好文 时间:
2014-07-29 15:05:18
阅读次数:
171
原题http://poj.org/problem?id=2456
Aggressive cows
Time Limit: 1000MS
Memory Limit: 65536K
Total Submissions: 6001
Accepted: 2989
Description
Farmer John has built a new...
分类:
其他好文 时间:
2014-07-29 15:04:48
阅读次数:
199
Mergeksorted linked lists and return it as one sorted list. Analyze and describe its complexity.题意:对k个有序的链表进行归并排序。并分析其复杂度。/** * Definition for singly-...
分类:
其他好文 时间:
2014-07-29 11:02:16
阅读次数:
205
折半查找,也叫二分查找,当在一个数组或集合中查找某个元素时,先定位出中间位置元素,如果要查找的元素正好和该中间位置元素相等,通过一次查找,就能找到匹配元素;如果要查找的元素小于该中间位置元素,就抛弃后面一半的元素,在前面一半的元素中再定位出中间位置元素,如此反复,直到找到匹配元素;如果要查找的元素大...
分类:
其他好文 时间:
2014-07-29 10:22:58
阅读次数:
313