上一页 1 ··· 8 9 10 11 12

2013年3月26日

多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满

摘要: 二进制压缩,看背包九讲啦,写的很详细了,不赘述````先贴不要求恰好装满的情形POJ 1276二进制压缩: 1 #include <cstdio> 2 #include <cstring> 3 int f[100005];//容量为i时最多能装多少 4 int p[12000];//物品拆分 5 int main() 6 { 7 int n,cash; 8 while(~scanf("%d%d",&cash,&n)) 9 {10 int vi,num;//物品价值,数量11 int cur = 0;12 memset(f,... 阅读全文

posted @ 2013-03-26 20:10 allh123 阅读(235) 评论(0) 推荐(0) 编辑

哈理工1053完全背包

摘要: 顺序求解是完全背包,逆序求解是0-1背包,自己想想View Code 1 #include <cstdio> 2 #include <cstring> 3 using namespace std; 4 struct node 5 { 6 int cost,value; 7 } ; 8 node u[100005]; 9 int f[100005];10 int main()11 {12 int G,U;13 int T,cur;14 scanf("%d",&T);15 while(T--)16 {17 // freopen("in. 阅读全文

posted @ 2013-03-26 20:06 allh123 阅读(130) 评论(0) 推荐(0) 编辑

2013年3月25日

0-1背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355

摘要: http://acm.zjut.edu.cn/不完全装满取值初始值都为0,恰好装满f[0]初始值为0,其他的为负无穷。得到的玩具的价格按从大到小排序,保证当玩具组合出的价格等于擎天柱价格时,玩具的数量会是最少的View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 int f[10010]; 6 int c[10010]; 7 int main() 8 { 9 int n,m;10 int p[20];11 while 阅读全文

posted @ 2013-03-25 22:48 allh123 阅读(210) 评论(0) 推荐(0) 编辑

POJ 3624 charm bracelet 0-1背包 不要求装满

摘要: 用f[i]记录当背包容量为i时,最大的重量。那么初始状态所有f[i]=0,一个物品一个物品考察,从容量大的背包开始到容量为1的背包结束,这时所有容量小的背包肯定都还没有放入该物品,这时原有的f[i]值如果小于f[i-pi]+pi,也就是未放这物品和放这物品后的容量值做比较,发现放这物品后总的容量值增大了,就放这物品。推荐看背包九讲,网上有下载,写得很好View Code 1 #include <cstdio> 2 int f[13000];//f[i]的值为背包容量为i时得到的最大价值 3 int w[3500]; 4 int d[3500]; 5 int main() 6 { 7 阅读全文

posted @ 2013-03-25 22:30 allh123 阅读(163) 评论(0) 推荐(0) 编辑

2013年3月24日

ZOJ 1136 Multiple BFS 取模 POJ 1465

摘要: 该题的关键是如果a%n = x;则(a*10+b)%n == (x*10+b)%n。例如你要算123456789%3,你只需算((12345678%n)*10+9)%3。想法是把给你的数字先排序,然后扩展,这样能保证你拓展出的数是以递增序列出现的。按示例所示,给你数字1,7,0,你可以拓展出10,11,17;70,71,77;从拓展出的六个新的数,每个数又能拓展出M(这里的M为3)个。然后要优化处理,算所谓的剪枝吧。拓展出的数模n的余数等于原数的余数*10+增加的数,再模n.如果新数的余数已经出现过,就不入队列了,因为该数没有被拓展的必要(已经有一个比它小的数用来拓展)。如果出现某数的余数为0 阅读全文

posted @ 2013-03-24 17:48 allh123 阅读(292) 评论(2) 推荐(0) 编辑

2013年3月23日

Bus Pass ZOJ 2913 BFS 最大中取最小的

摘要: /*该题的解题思路为BFS,从某点开始进行BFS,以层数表示到该地区的距离,用到了滚动队列。 对每个公交车的站点进行BFS,记录每个地区到该公交站的距离,遍历完后会得出每个地区到 所有公交站点的最大距离,以此知道选择了该地区后的星型阀值。然后从所有地区中选择一个 最小的*/View Code 1 #include <cstdio> 2 #include <queue> 3 #include <cstring> 4 #define ZMAX 10000 //地区编号的最大值 5 #define INF 100000 6 using namespace std; 阅读全文

posted @ 2013-03-23 02:02 allh123 阅读(185) 评论(0) 推荐(0) 编辑

2013年3月15日

zoj 2412 水田灌溉,求连通分支个数

摘要: 次题的关键是把稻田的中心点抽象成图中的点,两中心点有水管相连表示两点连通,这样,此题就转化成了求图的连通分支数目View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 char grid[52][52]; 6 char map[52][52]; 7 int m,n; 8 int dir[4][2] = {{-1,0},{0,1},{0,-1},{1,0}}; // 上,右,左,下 9 //编号分别为 0,1,2,310 阅读全文

posted @ 2013-03-15 17:14 allh123 阅读(223) 评论(0) 推荐(0) 编辑

z0j1008Gnome Tetravex

摘要: 该题是找满足条件的摆法,直接DFS会超时,关键是压缩存储,同一种正方形只存一次,再DFS,然后搜到一种成功的就要退出,不要把所有可能的摆法都搜完,不然也会超时。初始化种类数不要忘记。View Code 1 #include <cstdio> 2 #include <cstring> 3 bool flag ; //成功标志 4 int n,kinds; //正方形的个数为n*n,种类为kinds 5 struct square 6 { 7 int top,bottom,left,right; 8 int num; //该类正方行的个数 9 } rect[26];//记录 阅读全文

posted @ 2013-03-15 16:57 allh123 阅读(160) 评论(0) 推荐(0) 编辑

2013年3月13日

求最小公倍数与最大公约数的函数

摘要: 求整数a,b的最大公约数和最小公倍数先求最大公约数,辗转相除:int gcd(int a,int b){return (b == 0)? a:gcd(b,a%b);}求出最大公约数后,利用a*b = lcm(a,b)*gcd(a,b)求最小公倍数int lcm(int a,int b){ return a/gcd(a,b)*b;} 阅读全文

posted @ 2013-03-13 21:26 allh123 阅读(355) 评论(0) 推荐(0) 编辑

Havel-Hakimi定理(判断一个序列是否可图)

摘要: 判断一个有限序列是否是可图的,有Havel-Hakimi定理:由非负整数组成的非增序列s:d1,d2,~~~(省略号),dn(n>=2,d1>=1)是可图的,当且仅当序列:s1:d2-1,d3-1,~~~,d(d1+1) - 1,d(d1+2),~~~,dn是可图的。序列s1中有n-1个非负整数,s序列中d1后的前d1个度数减1后构成s1中的前d1个数。据此定理可以根据一个序列构造出相应的图(结果不唯一)实例:POJ 1659 青蛙的邻居注意:给每个顶点先编好号View Code 1 #include <cstdio> 2 #include <cstring> 阅读全文

posted @ 2013-03-13 21:17 allh123 阅读(713) 评论(0) 推荐(0) 编辑

上一页 1 ··· 8 9 10 11 12

导航