题目大意:给出一排东西,现在要建造防御塔,在i处建造防御塔的花费是cost[i],所有东西的花费是他它距离右侧最近的防御塔的距离。求最小花费。
思路:很简单的斜率优化。DP方程:f[i] = f[j] + (i - j - 1) * (i - j) / 2 + cost[i]
然后简单整理一下会发现f[j] + (j + 1) * j / 2 = f[i] - i ^ 2 + i * ...
分类:
其他好文 时间:
2014-12-02 16:41:15
阅读次数:
166
题目简述给定一个字符串,可以对其进行修改,删除,增加操作,相应的操作有对应的花费,要求你用最小的花费把字符串变为回文串题目做法先搞一遍floyed把各种操作的最小花费求出来,然后就是类似编辑距离的DP了,这题坑了好久。。。中间结果会爆int,我设置的inf=0x3f3f3f3f,中间结果有inf+i...
分类:
其他好文 时间:
2014-11-27 18:08:56
阅读次数:
276
题目大意:老板想要决定M个月每个月需要的工人数,已知雇佣一个工人的价格,
工人的月薪,解雇一个工人的价格,又知道M个月每个月至少需要多少个工人。问:
怎样雇佣工人,才能使得满足M个月工人需求的同时,付出最少的钱。
思路:在M个月中求出最大的需求人数Max,那么无论下个月需要多少个工人,最多
雇佣Max个工人也就够了。
状态转移方程:dp[i][j] = min(dp[i-1][k] + cost)(num[i-1] <=k <= Max)
意思是:第i个月雇佣j个人 = 当上个月雇佣k个人时的最小花费 + ...
分类:
其他好文 时间:
2014-11-27 12:49:50
阅读次数:
192
题目链接:点击打开链接
题意:
给定n个点的树[0,n)
开始所有边都是无色。
有3种操作:
1、选一个点染其相连的边 花费100
2、选一个点染其相连的2条边 花费175
3、选一个点染其相连的所有边 花费500
问:
染完所有边的最小花费。边可以重复染,点只能被操作一次。
#include
#include
#include
#include
#include
#...
分类:
其他好文 时间:
2014-11-27 00:18:06
阅读次数:
270
题目链接:传送门
题意:n个城市,m条道路,要求1--N的最小花费。规定从a城市到城市的花费有两种:如果之前到过c,花费为p,否则花费为r。注意:道路是双向的。
难点:可能a到b有多条路而且花费不同这样的话邻接矩阵会错;有人可能深搜的时候会让每个城市只走一次(DFS惯性思维),但这道题不一样,因为到达下一个城市之前可能需要先到另外一个城市以降低花费。这样的话可以标记每个城市访问过的次数,可以设...
分类:
其他好文 时间:
2014-11-25 16:37:22
阅读次数:
131
http://acm.hdu.edu.cn/showproblem.php?pid=1300这题大一就看到过,当时没读懂题目,今天再做就容易多了题意:升序给出n个珍珠的的数量和价值,问买这些珍珠的最小花费,其中可以用价值高的珍珠等量代替价值小的珍珠,并且一种价钱如果决定买,必须多买10个保底水dp,...
分类:
其他好文 时间:
2014-11-19 18:25:58
阅读次数:
184
题意 一个城市原来有l个村庄 e1条道路 又增加了n个村庄 e2条道路 后来后销毁了m个村庄 与m相连的道路也销毁了 求使所有未销毁村庄相互连通最小花费 不能连通输出what a pity!
还是很裸的最小生成树 把销毁掉的标记下 然后prim咯 结果是无穷大就是不能连通的
#include
#include
#include
using namespace std;
con...
分类:
其他好文 时间:
2014-11-17 00:36:09
阅读次数:
229
题目大意:带边权的树,给点一个根,问从根出发遍历某些点,所需的最小花费。
这既然是一棵树,那么从起点k到任意一个的路径都是唯一确定的(这就是树形的好处),我们可以深搜它的孩子,在过程中如果没有要访问的节点就直接返回。
否则将这条路径都标记。而且题目中可知不一定要返回到其实位置,那么可以在某个点停下。
sum[0][u]:回到u点的最短路径
sum[1][u]:不回到u点的最短路径
sum...
分类:
其他好文 时间:
2014-11-16 12:09:45
阅读次数:
142
给定2个长度相等的字符串a b每次可以把a串的任意一段变成一样的字母。问把a变成b最少需要几步。思路:1、dp[l][r] 表示把一个空字符串K 的[l,r] 变成 对应b[l,r]这段的最小花费。那么 dp[l][r] 就是 把 K[l] -> b[l], 然后再把 K[l+1, r] -> b[...
分类:
其他好文 时间:
2014-11-13 01:46:24
阅读次数:
187
题目链接:
给定2个长度相等的字符串a b
每次可以把a串的任意一段变成一样的字母。
问把a变成b最少需要几步。
思路:
1、dp[l][r] 表示把一个空字符串K 的[l,r] 变成 对应b[l,r]这段的最小花费。
那么 dp[l][r] 就是 把 K[l] -> b[l], 然后再把 K[l+1, r] -> b[l+1, r]
即: dp[l][r] = 1 + dp...
分类:
其他好文 时间:
2014-11-13 00:37:25
阅读次数:
261