题目链接:
http://poj.org/problem?id=3245
题目大意:
有n个连续的数对(Ai,Bi).求一个划分,使得每一部分的B的和的最大值最小。
划分要求:
1、对于任意的p<q , p,q属于不同的部分,则有Bp>Aq.
2、对于每一部分的最大A的和小于给定的lim.
解题思路:
当p<q是如果Bp<=Aq则p,q一定是属于一个部分。
先把必须在一起的粗略划分下,然后二分B的和的最小值。
dp[i]表示到达第i个数对时,此时的最大的A的和。
dp[i]=min{dp[j]+max(Ak,j+1<=k<=i),其中b(j+1)+...+b(i)<=二分的值。
代码:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include&