题目链接:
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<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#d

本文详细介绍了POJ 3245题目,即寻找序列划分的方法,使得每个部分的B值之和最大值最小。文章解析了题目要求,提出了先进行粗略划分,再使用二分查找优化的策略,并定义了dp状态表示到达某数对时最大A的和。最后,博主分享了关键的解题代码,展示了如何实现这一算法。
最低0.47元/天 解锁文章
284

被折叠的 条评论
为什么被折叠?



