2014年3月6日

POJ 1722: SUBTRACT

摘要: 题形:DP,背包题意:有一个数组,里面保存着n个数。con(i) 操作表示 把a[i] 和 a[i+1] 这两项 用 a[i]-a[i+1]这一项取代(所以操作结束后数组长度会减少1)。通过n-1次操作,可以让数组只剩下一个数。给你一个目标数,求n-1次操作,使得经过这些操作之后这个数组能变成这个目标数(题目保证存在解)思路:题目拐了个大弯啊~隐藏的真好。需要转换模型。首先,容易把题意转变成,a[1]-a[2]-a[3]-...-a[n],这样一个算式,让你加括号,使得结果为目标数然后想象一下最后的答案。假设我们知道最后的答案,那么把所有括号拆掉,结果的式子一定一这样的:a[1]-a[2]&# 阅读全文

posted @ 2014-03-06 18:41 ShineCheng 阅读(399) 评论(0) 推荐(0) 编辑

Vijos 1323: 化工厂装箱员

摘要: 题形:DP题意:A,B,C三种物品,一共N个,顺序摆放,按顺序拿。每次手上最多能拿10个物品,然后可以将某个类别的物品分类放好,再从剩下的拿,补全10个。问最少放几次,可以把所有物品分类好。思路:第一次见这种DP.……感觉应该是宽搜求最短路吧?好奇怪dp[i][a][b][c] 表示 拿到第i个物品,手上剩A物品a个,B物品b个,C物品c个,这个状态时,所用的最少的次数。假设我们这次拿A,则dp[i+a] [sum['A'][i+a]-sum['A'][i]] [b+sum['B'][i+a] - sum['B'][i]] [c+ 阅读全文

posted @ 2014-03-06 14:08 ShineCheng 阅读(186) 评论(0) 推荐(0) 编辑

2014年3月5日

CodeForces 385D: Bear and Floodlight

摘要: 类型:DP,计算几何题意:坐标系上有(l,0)~(r,0)一条直线,是一条路。然后还有其他一些点,这些点上有灯,灯能照一定的角度,需要用这些灯照亮那条路,问起点开始最远一直能照到哪。思路:状态压缩DP.dp[1111..1] = max(遍历所有灯,那个被去掉的灯,从dp[11..0..11]这点开始照,最远照到哪)就是求计算几何有点不会诶。。。。与出现顺序有关的问题,可以用状态DP,从N!降到2N。我的代码:#include #include #include #include using namespace std;#define N 22const double eps = 1e-8;c 阅读全文

posted @ 2014-03-05 21:44 ShineCheng 阅读(201) 评论(0) 推荐(0) 编辑

UVA - 10050 Hartals

摘要: #include #include int parry[110];int nowparry[110];int main() { int t; scanf("%d", &t); while (t--) { int n; int p; scanf("%d%d", &n, &p); for (int i = 0; i < p; i++) { scanf("%d", &parry[i]); nowparry[i] = 0; } int cnt = 0; ... 阅读全文

posted @ 2014-03-05 14:06 ShineCheng 阅读(120) 评论(0) 推荐(0) 编辑

2014年3月4日

SGU 495: Kids and Prizes

摘要: 类型:概率DP题意:有N个箱子放有礼物,M个人依次取。如果取到的箱子有礼物,则拿走礼物。无论有没有拿到礼物,都将箱子原状放回。(所以就有可能后面的人拿到前面的人拿过的箱子,然后就没得到奖品)。问,主办方期望送出的礼物数量。思路:思路一:期望递推法。期望是理想值。可以理解成,在理想状态下,做期望数次,一定,也是恰好,能完成这件事。为什么能这么想?在现实中显然是不成立的,但是我们是做题目,求的是一个理想的值,也就是说我们是在一个理想的环境中,所以可以用这种理想化的想法。那么这道题目就是:设dp[i] 表示i个人拿过以后,主办方送出礼物的期望数量。那么,对于第i个人,可能拿到,也可能没拿到礼物,转移 阅读全文

posted @ 2014-03-04 16:51 ShineCheng 阅读(197) 评论(0) 推荐(0) 编辑

CodeForces 148D: Bag of mice

摘要: 类型:概率DP题意:袋子里有黑球白球,公主和恶龙依次从里面拿。公主先。恶龙拿的时候,会额外掉出去一个(这个不参与胜负评判)。谁先拿到白球谁胜利。如果都拿完了都没人拿到,则判定恶龙胜。思路:如图代码:#include #include double p[1004][1004];int main() { int w, b; while (scanf("%d%d", &w, &b) != EOF) { //其实可以放到外面只初始化一次 for (int i = 0; i = 3 && j >= 2) { double re... 阅读全文

posted @ 2014-03-04 12:10 ShineCheng 阅读(171) 评论(0) 推荐(0) 编辑

2014年3月3日

HDU 4405: Aeroplane chess

摘要: 类型:概率DP题意:一条直线下飞行棋,色子六个面等概率。同时存在一些飞机航线,到了某个点可以直接飞到后面的另一个点,可以连飞,保证一个点至多一条航线。求到达或者超过终点 所需要 掷色子的期望次数。思路:如果可以飞,那么从这个点到终点的期望次数 等于 飞到的那个点 到终点的期望次数。 否则,就是掷一次色子,然后后面六个点到终点的期望次数 求平均 +1;换种表示:if (canFly) dp[now] = dp[flyTo];else dp[now] = (dp[now+1]+dp[now+2]+...+dp[now+6]) / 6;代码:#include #include #define N 1 阅读全文

posted @ 2014-03-03 23:42 ShineCheng 阅读(130) 评论(0) 推荐(0) 编辑

HDU 4336: Card Collector

摘要: 题形:概率DP题意:有n个物品,和得到每个物品的概率。问收集齐所有物品的期望次数。思路:面对一个局面,我们都考虑 拿一次 以后 会怎么样?对于一个物品:E = p*1 + (1-p)*(1+E); 期望 我这一次拿到了 我这一次没拿到,还需要拿(1+E)次 (这里的1 代表这次, E表示以后还要拿E次)对于两个物品:E__ = p1*(1+E1_) + p2*(1+E_2) + (1-p1-p2)*(1+E__) 解释第一项:我这次拿到了1,那到1以后我还需要拿 E1_ 次,所以 p1 的概率 我需要拿 1+E1_次额。。看不懂继续百度吧。然后这里用状态压缩DP完成坑点: 递归超时,... 阅读全文

posted @ 2014-03-03 23:10 ShineCheng 阅读(158) 评论(0) 推荐(0) 编辑

UVA - 10196:Check The Check

摘要: 类型:简单模拟大致题意:已知国际象棋行棋规则,给你一个局面,问是否将军?谁将谁的军?(保证不会同时将军)思路:都以小写字母 测试 是否将 大写字母。 然后一个局面测两次(一次直接测,一次反转棋盘,同时大小写互换,测)原题:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21173The ProblemYour task is to write a program that reads a chess board configuration and answers if there's a king under at 阅读全文

posted @ 2014-03-03 12:16 ShineCheng 阅读(372) 评论(0) 推荐(0) 编辑

POJ 2577: Interpreter

摘要: 简略解题报告DescriptionA certain computer has 10 registers and 1000 words of RAM. Each register or RAM location holds a 3-digit integer between 0 and 999. Instructions are encoded as 3-digit integers and stored in RAM. The encodings are as follows: 100 means halt 2dn means set register d to n (between 0 a 阅读全文

posted @ 2014-03-03 00:17 ShineCheng 阅读(372) 评论(0) 推荐(0) 编辑

导航