DP - cool's Blog

[dp地狱训练]flag贴

作为大坡书院的一员,dp能力一直处于垫底,被强行拉来艹dp题。

 

继续阅读

[树状数组优化DP]bzoj3594

3594: [Scoi2014]方伯伯的玉米田

Time Limit: 60 Sec  Memory Limit: 128 MB
Submit: 955  Solved: 405
[Submit][Status][Discuss]

Description

方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美。
这排玉米一共有N株,它们的高度参差不齐。
方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩下的玉米的高度构成一个单调不下降序列。
方伯伯可以选择一个区间,把这个区间的玉米全部拔高1单位高度,他可以进行最多K次这样的操作。拔玉米则可以随意选择一个集合的玉米拔掉。
问能最多剩多少株玉米,来构成一排美丽的玉米。

Input


第1行包含2个整数n,K,分别表示这排玉米的数目以及最多可进行多少次操作。
第2行包含n个整数,第i个数表示这排玉米,从左到右第i株玉米的高度ai。

Output


输出1个整数,最多剩下的玉米数。

Sample Input

3 1
2 1 3

Sample Output

3

HINT

 

1 < N < 10000,1 < K ≤ 500,1 ≤ ai ≤5000

 

继续阅读

[斜率优化DP]bzoj1911

1911: [Apio2010]特别行动队

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 3390  Solved: 1540
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

4
-1 10 -20
2 2 3 4

Sample Output

9

HINT

 

继续阅读

[树形DP]bzoj1040

1040: [ZJOI2008]骑士

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 3082  Solved: 1179
[Submit][Status][Discuss]

Description

Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英。他们劫富济贫,惩恶扬善,受到社会各界的赞扬。最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队。于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶。骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾。每个骑士都有且仅有一个自己最厌恶的骑士(当然不是他自己),他是绝对不会与自己最厌恶的人一同出征的。战火绵延,人民生灵涂炭,组织起一个骑士军团加入战斗刻不容缓!国王交给了你一个艰巨的任务,从所有的骑士中选出一个骑士军团,使得军团内没有矛盾的两人(不存在一个骑士与他最痛恨的人一同被选入骑士军团的情况),并且,使得这支骑士军团最具有战斗力。为了描述战斗力,我们将骑士按照1至N编号,给每名骑士一个战斗力的估计,一个军团的战斗力为所有骑士的战斗力总和。

Input

第一行包含一个正整数N,描述骑士团的人数。接下来N行,每行两个正整数,按顺序描述每一名骑士的战斗力和他最痛恨的骑士。

Output

应包含一行,包含一个整数,表示你所选出的骑士军团的战斗力。

Sample Input

3
10 2
20 3
30 1

Sample Output

30

HINT

 

对于100%的测试数据,满足N ≤ 1 000 000,每名骑士的战斗力都是不大于   1 000 000的正整数。

 

继续阅读

[斜率优化DP]bzoj1096

1096: [ZJOI2007]仓库建设

Description

L公司有N个工厂,由高到底分布在一座山上。如图所示,工厂1在山顶,工厂N在山脚。 由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用。突然有一天,L公司的总裁L先生接到气象部门的电话,被告知三天之后将有一场暴雨,于是L先生决定紧急在某些工厂建立一些仓库以免产品被淋坏。由于地形的不同,在不同工厂建立仓库的费用可能是不同的。第i个工厂目前已有成品Pi件,在第i个工厂位置建立仓库的费用是Ci。对于没有建立仓库的工厂,其产品应被运往其他的仓库进行储藏,而由于L公司产品的对外销售处设置在山脚的工厂N,故产品只能往山下运(即只能运往编号更大的工厂的仓库),当然运送产品也是需要费用的,假设一件产品运送1个单位距离的费用是1。假设建立的仓库容量都都是足够大的,可以容下所有的产品。你将得到以下数据: 工厂i距离工厂1的距离Xi(其中X1=0);  工厂i目前已有成品数量Pi;  在工厂i建立仓库的费用Ci; 请你帮助L公司寻找一个仓库建设的方案,使得总的费用(建造费用+运输费用)最小。

Input

第一行包含一个整数N,表示工厂的个数。接下来N行每行包含两个整数Xi, Pi, Ci, 意义如题中所述。

Output

仅包含一个整数,为可以找到最优方案的费用。

Sample Input

3
0 5 10
5 3 100
9 6 10

Sample Output

32
 

继续阅读

[单调队列优化DP]bzoj3831

3831: [Poi2014]Little Bird

Description

 

有一排n棵树,第i棵树的高度是Di。
JHT要从第一棵树到第n棵树去找他的妹子玩。
如果JHT在第i棵树,那么他可以跳到第i+1,i+2,...,i+k棵树。
如果JHT跳到一棵不矮于当前树的树,那么他的劳累值会+1,否则不会。
为了有体力和妹子玩,JHT要最小化劳累值。
 

 

Input

 

第一行N。第二行Di。第三行JHT的妹子个数。第四个每个妹子的K。

 

Output

 

每个妹子所需的体力
 

 

继续阅读

[DP]bzoj1037

BZOJ传送门

话说我的DP真的好水 这种题目根本做不出

f[i][j][x][y] 表示 总共i人 有j个男的 从i人往前的一段人中,男比女最多多x人 女比男最多做y人

这是 网上的题解 代码如下

	f[0][0][0][0] = 1;
	for (int i = 0;i < n+m;i++)
		for (int j = 0;j <= n;j++)
			for (int x = 0;x <= k;x++)
				for (int y = 0;y <= k;y++)
					if (f[i][j][x][y])
					{
						if (x + 1 <= k&&j+1 <= n)
							f[i+1][j+1][x+1][max(y-1,0)] += f[i][j][x][y],f[i+1][j+1][x+1][max(y-1,0)] %= mod;
						if (y + 1 <= k&&i+1-j <= m)
							f[i+1][j][max(x-1,0)][y+1] += f[i][j][x][y],f[i+1][j][max(x-1,0)][y+1] %= mod;
					}

但有点让我想不通 为什么不干脆f[i][j][x][y] i表示男 j表示女呢 而且空间 时间都快了。

而且在bz上也AC了 请大神教导




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee