EricLiseo2register.blog.chinaunix.net
jiangwen127
范德萨发而为
全部博文(392)
2017年(5)
2016年(19)
2015年(34)
2014年(14)
2013年(47)
2012年(40)
2011年(51)
2010年(137)
2009年(45)
王麟轩
TrollWar
周恒咪咕
花田井
39320816
24415930
sinojell
lizhengy
coolias
hs0916
hicocsco
cynthia
浪花小雨
丸喵喵
Bsolar
格伯纳
Jaraxuss
小小城御
分类:
2010-03-18 10:29:57
#include <stdio.h> int n, m, pages[210]; int check(int mid) { int i, cnt, sum; cnt = sum = 0; for (i=0 ; i<=n ; i++) { sum += pages[i]; if (sum >= mid) { if (sum > mid) i--; sum = 0; cnt++; if (cnt == m) break; } } if (i == n || i == n + 1) return 0; else return 1; } void solve() { int low, high, mid, i; low = high = 0; for (i=1 ; i<=n ; i++) high += pages[i]; low = high / n; while (low <= high) { mid = (low + high) / 2; if (0 == check(mid)) high = mid - 1; else low = mid + 1; }
/*特别注意这里,结果应该是low值,因为如果之前已找到答案A, high = mid - 1,最后mid和high值都小于答案,只有在最后一次判断的时候low = mid + 1才再次回到这个答案*/ printf("%d\n", low); } int main(int argc, char *argv[]) { int i; while (scanf("%d %d", &n, &m)) { if (0 == n && 0 == m) break; for (i=1 ; i<=n ; i++) scanf("%d", &pages[i]); solve(); } }
上一篇:GOF设计模式之strategy模式
下一篇:kruskal最小生成树
登录 注册