上一页 1 ··· 3 4 5 6 7 8 下一页
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1421刚开始想的时候,想转化成背包来做,但是不好表示,然后考虑到dp中的有几个相关元素,这里有两,一个是物品个数,一个是选择的对数,那么有了状态dp[i][j]表示前i件物品选择j对所付出的代价,那么对于第i件有选与不选两种,所以dp[i][j]=min((dp[i-2][j-1]+charge(weight[i-1],weight[i])),dp[i-1][j]);即这件物品要选的话那么前一件和他是一对的,则代价是他们两的代价加上dp[i-2][j-2],如果这件物品不选则dp[i-1][j],前i-1件选 阅读全文
posted @ 2012-08-29 13:20 一把刷子 阅读(320) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1176开始对dp有感觉了,就是能够覆盖所有的状态,而且要有状态转移方程,即递推关系。那么这题就是,利用dp【i】【j】表示在第i秒在位置j可以获得的最大面包数,那么他可能从前一秒的左边,或者右边,或者原地不动来,那么着就是状态了。对于0和10这两个点要特殊处理。因为第一秒在位置5,所以初始化的时候要把第一秒的初始化了。初始化: dp[1][4]=map[1][4]; dp[1][5]=map[1][5]; dp[1][6]=map[1][6];状态转移:dp[i][j]=max(m... 阅读全文
posted @ 2012-08-29 00:34 一把刷子 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 定义:在一个有向图中,找出最少的路径,使得这些路径,经过每一个点,且每一个点只与一条路径相关联,由上面得出:1.一个单独的点是一个路径2:如果有路径a,b,c。。。。f,g。a为起点,g为终点。那么a到g的点不在与其他点之间存在有向边。最小路径覆盖=点数---最大匹配数证明:1 如果匹配数为0,那么图中没有边,需要n条路径2 如果a,b之间连一条边,那么匹配数增1,需要的路径数会减少一,因为a,b之间只需要一条,那么就证明了**********************一个最好的利用是 把点分为i与i’点,建立二分图模板。View Code #include<iostream>#in 阅读全文
posted @ 2012-08-28 21:13 一把刷子 阅读(2468) 评论(0) 推荐(0) 编辑
摘要: http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=697题意:给定有向无环图,每个点代表一个城市,一些城市之间有边,在城市上放伞兵,伞兵可以管理在他这条路径上的所有城市,问最小放多少个伞兵,可以经过每一个城市,就是二分图的最小路径覆盖View Code #include<iostream>#include<string.h>#include<stdio.h>#include< 阅读全文
posted @ 2012-08-28 20:57 一把刷子 阅读(190) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4160转化为二分图的最小路径覆盖问题。那么答案就是n-最大匹配数View Code #include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>#include<vector>#define maxn 10000using namespace std;int n;struct node0{ int h,w,l;}node[maxn];vector<int> 阅读全文
posted @ 2012-08-28 20:17 一把刷子 阅读(141) 评论(0) 推荐(0) 编辑
摘要: http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3074之前写过这类型的题目,为什么比赛的时候就脑抽了呢,因为要最短的改动达到目的,所以我们可以这样想,利用dis【a】【b】来表示改动了b条边到达a点。那么对于原图中的边其实我们还加了一些边。如原图中a与c相连,我们还加了dis【c】【b+1】与即dis【a】【b】的边,这条边的权值为0,只不过这条边必须在有了dis【a】【b】之后才能添加。然后遍历dis【n】【i 阅读全文
posted @ 2012-08-27 21:51 一把刷子 阅读(200) 评论(0) 推荐(0) 编辑
摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3633两种解法:自己的解法是,因为当时考虑到开visit数组10的31方太大了,所以首先将给定的数离散化,然后对于在范围内的每一个数和他所在的数组中的下标连边。询问的时候,遍历查询范围,对于每一个数,如果这个数所连的边中下标有在这个数之前且在查询范围内的那么输出这个数就可以了。**********开始的时候ok搞成了小写,wa到吐血。。。。#include<iostream>#include<string.h>#include<algorit 阅读全文
posted @ 2012-08-27 01:11 一把刷子 阅读(359) 评论(2) 推荐(0) 编辑
摘要: http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2966之前看题的时候没有注意到每一个数最后都会有了循环这句话,解决了这个问题后又开始担心数组太大开不下10的9次方。但讨论了下最大的那个数也是81*10所以开1000就够了。然后我们设置一个visit数组,来表示数字是否出现过,,以及出现了几次。对于读入的两个数a,b如果大于1000那么他不存入visit数组对于a求出他的合乎要求的序列,对于b在开一个visitb数 阅读全文
posted @ 2012-08-25 01:50 一把刷子 阅读(286) 评论(0) 推荐(0) 编辑
摘要: http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2967要先找到最深的深度,然后用奇偶性来标识是做交运算还是补运算。奇数表示做叫运算,偶数表示补运算。然后注意的一点就是要用全局变量i,这样就解决了重复算的问题。值得注意。#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>usi 阅读全文
posted @ 2012-08-25 01:37 一把刷子 阅读(286) 评论(0) 推荐(0) 编辑
摘要: http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=11975#problem/B一道数学题,根据反射定律求a关于斜边的对称点a‘的坐标(x,y)。根据点到直线的距离可以列出方程 h-a=y-kx-h。根据向量垂直可以列出x+ky-ka=0;解得x=2(a-h)/(1/k+k) y=(ka-x)/k其中k为转化后的斜率,要注意斜率是负的。圆周率 pi=acos(-1.0)#include<iostream>#include<stdio.h>#include<string.h>#include&l 阅读全文
posted @ 2012-08-24 01:54 一把刷子 阅读(243) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 下一页