poj3273(二分)

来源:互联网 发布:java简单工厂模式代码 编辑:程序博客网 时间:2024/05/04 03:30

http://poj.org/problem?id=3273

题意:给你n个数组,要分成m组。要求分成m组后,组间最大值要啊最小。

思路:在二分题里找到的,可是怎么看都想用记忆话搜索做,最后得出得结论是。。。做不出来。。。,最后看到是二分答案,好吧,思路豁然开朗。

#include <iostream>#include <cstring>using namespace std;int n,m;int a[100001];int getAns(int l, int r){if (l == r) return r;int mid = (l + r) / 2;int temp = 0;int ans = 0;for (int i = 1; i <= n; i++){temp += a[i];if (temp > mid) {i--;temp = 0;ans++;}}ans++;if (ans > m) return getAns(mid+1, r);return getAns(l,mid);}int main(){cin >> n >> m;//memset(s,0,sizeof(s));int min = 0;int max = 0;for (int i = 1; i <= n; i++){cin >> a[i];max = max + a[i];if (a[i] > min) min = a[i];}//memset(f,0,sizeof(f));cout << getAns(min, max) << endl;}


0 0
原创粉丝点击