![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
xu960218
这个作者很懒,什么都没留下…
展开
-
[DP]Tower
描述Rainbow和Freda要在Poetic Island市的一座山脚下盖房子定居了……盖房子需要钢材,幸运的是,这里有排成一行的n座废弃的铁塔,从左到右编号为1~n,其中第i座的高度为h[i]。Rainbow和Freda想盖一座上面小下面大的城堡,并且城堡的层数尽可能多。因此,他们要把这些铁塔分成尽量多组,每组内的铁塔编号必须是连续的,并且从左到右各组内铁塔的高度之和单调不减。但是原创 2013-08-18 09:11:57 · 1355 阅读 · 0 评论 -
[DP][USACO Open11] 修剪草坪
f[i]=min{f[j]}+a[i]f[i]表示前i头奶牛满足条件且不用第i头奶牛的最少损失res=总收益-最少损失单调队列#include#includeusing namespace std;int a[100010],n,t,h,k;long long f[100010],s;long long res=99999999原创 2013-10-10 19:58:30 · 1385 阅读 · 0 评论 -
[DP]猪仙修桥(带权LIS)
题目大意:已知河两岸的哪两个点之间可以修桥和修这个桥的价值,桥的高度都是一样的,所以任意两座桥不能交叉。 求在能修最多桥的情况下桥的最大价值。 solution:按左右端点前后双关键子排序,在O(n2)LIS的基础上加入权值判断记F[i]为当前位最长子序列长度,G[i]为价值如果F[i]则F[i]=F[j]+1;G[i]=G[j]+v[i];原创 2013-10-17 07:52:22 · 1706 阅读 · 0 评论 -
[DP]集合
题目大意:对于一个集合S={1,2,3,……,n},他有2^n个子集。对于每个子集T,我们给定他的得分为F(T)。现让你寻找一个S的子集T,使得T的所有子集的得分和尽可能大。输入数据第一行有一个正整数n。随后的2^n行,按“二进制序”从小到大给出每个子集的得分。例如n=3时,就是按照{}、{1}、{2}、{1,2}、{3}、{1,3}、{2,3}、{1,2,3}的顺序给出的。原创 2013-10-17 07:43:11 · 705 阅读 · 0 评论 -
[DP]最长公共上升子序列LCIS
#include#include#includeusing namespace std;int T,n,m,f[510];long long a[510],b[510];int main(){ scanf("%d",&T); while(T--) { scanf("%d",&n); memset(f,0,sizeof(f)); for(int i=1;i<=n;+原创 2013-10-17 17:42:03 · 667 阅读 · 0 评论 -
[DP] [Usaco2008 Feb]Making the Grade 路面修整
题意大意:花最少的代价将一个序列变为不下降序列solution:保证最优:每个值修改后还会是原序列中的值。序列s为h[i]排序后序列。f[i][j]表示a序列前i个数变为不下降序列且h[i]被改成s[j]的最小代价。f[i][j]=min{f[i-1][k]}+abs(s[j]-h[i])(1开g[i][j]记录min{f[i-1][k]}。原创 2013-10-19 21:15:34 · 1523 阅读 · 0 评论 -
[双连通分量][DP]免费航班
题目大意: 小Z在MOI比赛中获得了大奖,奖品是一张特殊的机票。使用这张机票,可以在任意一个国家内的任意城市之间的免费飞行,只有跨国飞行时才会有额外的费用。小Z获得了一张地图,地图上有城市之间的飞机航班和费用。已知从每个城市出发能到达所有城市,两个城市之间可能有不止一个航班。一个国家内的每两个城市之间一定有不止一条飞行路线,而两个国家的城市之间只有一条飞行路线。小Z想知道,从每个原创 2013-10-22 17:27:05 · 1457 阅读 · 0 评论