摘要:
题意:给定一个数列,要求把数列切分成m个段,使得总和最大的一段的总和最小。求这个总和。分析:只知道dp的方法,但是超时。后来知道是二分。就是二分查找一个阶段消费的上限(总和)。每次可以用O(n)的效率来判断这个值是不是符合。我们要找的就是符合条件的最小值。View Code #include <cstdio>#include <iostream>#include <cstdlib>#include <cstring>usingnamespace std;#define maxn 100005int n, m, f[maxn], l, r, mid 阅读全文
摘要:
又犯了同样的错误,开edge数组开小了,应该是maxm,开成了maxn正反两个图,进行两次dijkstra即可View Code #include <cstdio>#include <iostream>#include <cstdlib>#include <cstring>using namespace std;#define maxn 1005#define maxm 100005#define inf 1000000000struct Edge{ int v, w, next;}edge[maxm], opedge[maxm];int n, 阅读全文
摘要:
利用priority_queue模拟霍夫曼树。注意结果要用long long.View Code #include #include #include #include #include usingnamespace std;struct Integer{ longlong x; Int... 阅读全文
摘要:
利用栈进行动态规划,要注意的地方是总和得用longlong因为80000^2是超出int范围的。View Code 阅读全文