摘要: http://poj.org/problem?id=3630POJ 3630 Phone List大意:电话簿中有n个电话号码,判断这些号码是否合法。若某个电话号码是另一个电话号码的前缀,则该号码簿非法分析:字典树即可注意点,字典树在插入过程中新建节点会超时,故节点用数组的方式存储网上看到一个风格较好的代码,模仿了一下写的,原始网站http://www.cnblogs.com/sysuwhj/archive/2010/11/17/1880328.htmlView Code 1 /*2 http://poj.org/problem?id=36303 POJ 3630 Phone List4 大意 阅读全文
posted @ 2011-03-16 19:29 AndreMouche 阅读(635) 评论(0) 推荐(0) 编辑
摘要: 昨天把KMP复习了一下,顺便做了一些以前做过的题,貌似有那么点感觉O(∩_∩)O~贴出来,方便以后复习,O(∩_∩)O~http://poj.org/problem?id=1961POJ 1961 Period大意: 定义字符串A,若A最多由n个相同字串s连接而成,则A=s^n,如"aaa" = "a"^3,"abab" = "ab"^2 "ababa" = "ababa"^1 给出一个字符串A,求该字符串的所有前缀中有多少个前缀SA= s^n(n>1)输出符合条件的前 阅读全文
posted @ 2011-03-15 13:17 AndreMouche 阅读(1553) 评论(0) 推荐(0) 编辑
摘要: 昨天搜水题做,一不小心进一牛人的博客,看到几道二分题的报告,忍不住做了一下,顺便把人家对题目的描述偷懒过来,说我邪恶吧( ⊙ o ⊙ )!POJ 3258 River Hopscotchhttp://poj.org/problem?id=3258长为L的河道,起点在0位置,终点为L位置,期间分布着n块石头,石头不会重叠求拆掉其中的m块石头,使相邻两石头间的距离的最小值最大,并输出这个值。。。额。。。貌似描述不清。。。将就一下,(*^__^*) 嘻嘻……View Code #include#include#includeusingnamespace std;constint N =50000+1 阅读全文
posted @ 2011-03-13 19:55 AndreMouche 阅读(708) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2362POJ 2362 Sqare大意: 有n根木棒,长短不一,问能否使用所有的木棒摆出一个完整的正方形?分析:1.木棒的总长度整除42.DFSView Code #include#includeconstint N =22;int sticks[N];bool visited[N];int part;int n;//从start根木棒出发,在已经凑齐pnum条边,//第pnum+1条边已有pre长度的情况下,搜索是否存在满足答案的解bool search(int start,int pnum,int pre){ if(pnum==3&am 阅读全文
posted @ 2011-03-13 19:47 AndreMouche 阅读(443) 评论(0) 推荐(0) 编辑
摘要: POJ 3667 Hotelhttp://poj.org/problem?id=3667题目大意: 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光。作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿。这个巨大的旅馆一共有N (1 <= N <= 50,000)间客房,它们在同一层楼中顺次一字排开,在任何一个房间里,只需要拉开窗帘,就能见到波光粼粼的湖面。 贝茜一行,以及其他慕名而来的旅游者,都是一批批地来到旅馆的服务台,希望能订到D_i (1 <= D_i <= N)间连续的房间。服务台的接待工作也很简单:如果存在r满足编号为r 阅读全文
posted @ 2011-03-12 12:39 AndreMouche 阅读(1105) 评论(1) 推荐(1) 编辑
摘要: http://acm.tju.edu.cn/toj/showp3758.htmlTJU 3758. Jewel 模拟题,开始数组为空,有以下操作:Insert x Put a bead with size x to the right of the chain (0 < x < 231, and x is different from all the sizes of beads currently in the chain)Query_1 s t k Query the k-th smallest bead between position s and t, inclusive. 阅读全文
posted @ 2011-03-05 20:26 AndreMouche 阅读(333) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/submit.php?pid=3473HDU 3473 Minimum Sum大意:已知n个正整数x0,x1,x2...xn-1排成一列,要求回答若干问题,问题类型如下:给你一个区间[l,r],要求sum(x-xi)(l<=i<=r)的最小值,其中x必须为xl,xl+1...xr中的一个数分析:易推得对于任意区间[l,r],符合条件的x为所在区间的中位数,求任意区间的中位数可以用划分树来解决,同样的,我们用suml[deep][i]来记录划分树中第deep层到数i位置放入左子树的数字的和,注意:当最后得出中位数median左边的和suml 阅读全文
posted @ 2011-03-05 18:50 AndreMouche 阅读(755) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2104POJ 2104 K-th Number大意:有n个数字排成一列,有m个询问,格式为:left right k即问在区间[left,right]第k大的数据为多少?分析:划分树具体的介绍开心->OK介绍得很清楚,这里把他PPT里的部分贴上来,邪恶一把,嘿嘿。。建图:建树的过程比较简单,对于区间[l,r],首先通过对原数组的排序找到这个区间的中位数a[mid],小于a[mid]的数划入它的左子树[l,mid-1],大于它的划入右子树[mid,r]。同时,对于第i个数a[i],记录在[l,i]区间内有多少数被划入左子树。最后,对它的 阅读全文
posted @ 2011-03-04 22:35 AndreMouche 阅读(912) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1077八数码问题:由1,2,3,4,5,6,7,8,x组成一个3*3的矩阵,如1 2 34 x 5 6 7 8其中x可与其上,下,左,右相邻的元素互换,现问从给出状态出发到达以下状态:1 2 3 4 5 67 8 x需要对x进行怎样的位移操作,输出x的最少位移信息,若状态不可达,输出unsolvable分析:1.一个很容易的想法,即BFS,2.用康托展开将每个状态转化为整数,即可略过已访问点3.再用优先队列加以优化4.其实可以用A*加以优化,f(x) = g(x)+h(x),h(x)为当前状态中x所在位置到右下角位置的哈密尔顿距离(不过实际 阅读全文
posted @ 2011-03-02 21:45 AndreMouche 阅读(1717) 评论(0) 推荐(0) 编辑
摘要: http://cs.scu.edu.cn/soj/problem.action?id=3843SCOJ 3843 ZUMA大意:有100种不同的颜色,编号为1,2,3。。100.从中取n颗珠子排成一条直线,已知将某颗珠子插入到某一位置,若与该珠子连续的相同颜色的珠子个数>=k,那么与这一连串相同颜色的珠子便可全部消去现要消去所有珠子,问至少需要多少珠子?分析:记忆化搜索、、、、、语言组织能力太差,说不太清。。。。囧o(╯□╰)o#include#includeconst int MAXN = 100+5;const int K = 5+1;int n,k;int a[MAXN];int 阅读全文
posted @ 2011-02-27 21:29 AndreMouche 阅读(4884) 评论(0) 推荐(0) 编辑
摘要: ZOJ 3209 Treasure Maphttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3372大意:已知有一张n*m的图,p个矩形,问至少需要多少个矩形能够完全覆盖整幅图, 要求不能出现重叠分析: 转化为精确铺盖问题,即将图拉成一条长度为n*m的链,在该图中找到每个矩形 对应的覆盖点,用DancingLink计算最少需要点数即可。。#include#includeconst int MAX_COLOUMN = 30*30+2;//最多出现列数const int MAX_ROW = 500+2;//最多出现的行数int c 阅读全文
posted @ 2011-02-27 10:28 AndreMouche 阅读(698) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2829HDU 2829 Lawrence大意: 有一条直线型的铁路,上面有n个火车站,每个火车站有各自的权重a[i], 现有m枚炮弹,每枚炮弹可炸毁一段铁路。 已知整条铁路的权重W = sum(a[i]*a[j]),其中火车站编号i#include#includeusing namespace std;const int N = 1000+5;int sum[N];int num[N];int cost[N][N];int s[N][N];int dp[N][N];int main(){ int n,m... 阅读全文
posted @ 2011-02-27 09:43 AndreMouche 阅读(577) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3076POJ 3076 Sudoku求解规模为16*16的数独问题,还是数独,呵呵,直接改了上题的代码就是了。。所以也不废话了,嘿嘿。。。#include#includeconst int MAX_COLOUMN = 16*16+16*16+16*16+16*16+2;//最多出现列数const int MAX_ROW = 16*16*16+2;//最多出现的列数int cnt[MAX_COLOUMN];//cnt[i]统计第i列1的个数int most,coloumn;bool ans[MAX_ROW];//ans存放最终选中的行//跳舞 阅读全文
posted @ 2011-02-24 21:29 AndreMouche 阅读(667) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2676POJ 2676 Sudoku也是求解规模为9*9的数独问题,与POJ 3074 Sudoku相同的问题,只是修改了输入输出格式而已。。。所以也不废话了,嘿嘿。。。#include#includeconst int MAX_COLOUMN = 81+9*9+9*9+9*9+2;//最多出现列数const int MAX_ROW = 81*9+2;//最多出现的列数int cnt[MAX_COLOUMN];//cnt[i]统计第i列1的个数int most,coloumn;bool ans[MAX_ROW];//ans存放最终选中的行/ 阅读全文
posted @ 2011-02-24 20:51 AndreMouche 阅读(549) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3074POJ 3074 Sudoku大意:求解规模为9*9的数独问题分析:对于每一行,每一列,每一宫,数字1,2。。。9都需出现1次且只能是一次,可转化为精确覆盖问题,用跳舞链解决建模型:行数为9*9*9,数独中,第i行j列放数字k的状态存储在图中第(i*9+j)*9+k行中列数为9*9+9*9+9*9+9*9,其中第一个9*9代表第i格是否已填满,用第二个9*9确保每行的数字唯一且均出现一次第三个9*9确保每列的数字唯一且出现一次第四个9*9确保每宫的数字唯一出现1次#include#includeconst int MAX_COLOUM 阅读全文
posted @ 2011-02-24 20:35 AndreMouche 阅读(1077) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3740POJ 3740 Easy Finding大意:精确覆盖问题:给定一个由0和1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个 1?分析:用跳舞链来解决该问题即可 跳舞链的核心: 如果A是空的,问题解决;成功终止。 否则,选择一个列c(确定的)。 选择一个行r,满足 A[r, c]=1 (不确定的) 把r包含进部分解。 对于所有满足 A[r,j]=1 的j, 从矩阵A中删除第j列; 对于所有满足 A[i,j]=1 的i, 从矩阵A中删除第i行。在不断减少的矩阵A上递归地重复上述算法。#in... 阅读全文
posted @ 2011-02-23 21:27 AndreMouche 阅读(828) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1966POJ 1966 Cable TV Network算法核心:网络流-SAP#include#includeconst int N = 50*2+5;const int INF = N;const int MAXN=N;const int maxn = N;int map[N][N];int cmap[N][N];int getNum(){ char c; int num = 0; while(c=getchar()) { if(c='0')break; } while(c='0') { num=num* 阅读全文
posted @ 2011-02-23 15:19 AndreMouche 阅读(526) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1459POJ 1459 Power Network大意:已知供电站的最大供电量,消费者的最大消费量,电线传输电量的上限,求整个供电网的最大供电量算法核心:SAP#include#includeconst int N = 100+5;const int MAXN =N;const int INF = 20000+200+2;int S,T;//S为源点,T为汇点int graph[N][N];int getNum(){ int num = 0; char c; while(c=getchar()) { if(c='0')bre 阅读全文
posted @ 2011-02-23 15:08 AndreMouche 阅读(346) 评论(0) 推荐(0) 编辑
摘要: POJ 1149 PIGS大意:有m个猪圈和n个顾客,最初猪圈是锁着的。每个顾客有其中的A把钥匙,需要买B头猪顾客在买完猪便将门锁上,而且顾客是按照顺序来的。商家可以对开着的猪圈里面的猪进行任意调配分析:构图1.将猪圈编号为1,2,。。。。m;2.将顾客编号为m+1,m+2,....m+n3.源点为0,汇点为m+n+14.若猪圈i有a[i]头牛,那么建立一条从0到i,流量为a[i]的边5.若顾客j是第一个能打开猪圈i的顾客,那么从猪圈i到顾客j之间建立边,流量无限大6.若顾客j是能打开猪圈i的第k个顾客,第k-1个顾客为x,那么从顾客x到顾客j建立一条边此题使用的最大流模板是SAP,BlueS 阅读全文
posted @ 2011-02-23 14:47 AndreMouche 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 2010-08-24 00:44来源http://hi.baidu.com/lerroy312/blog/item/d7ea97ee7b1f3cddd439c927.html点连通度的定义:一个具有N个点的图G中,在去掉任意k-1个顶点后(1=2,则任意K个顶点共圈。求边连通度总结:同样引入独立轨的概念,只是在这里叫弱独立轨,同样在每条弱独立轨中只有去掉某一条边就可以使起点到终点不连通,现在整个图G的边连通度就是要找出任意两点的弱独立轨的最小值。如果图G为完全图,则K`(G)为n-1。构建一个网络N若G为无向图:1. 原G图中的每条边e=UV变成两条边e`=UV,e``=VU,容量都为1;2. 阅读全文
posted @ 2011-02-19 21:30 AndreMouche 阅读(2341) 评论(1) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2154poj 2154:Colorhttp://blog.sina.com.cn/s/blog_6f71bea30100opru.html大意:n种颜色的珠子可组成多少种长度为n的项链?这题和2409 类似,不同之处在于,只考虑旋转,不考虑翻转;因此相对前面两个题目应该说是更简单,但一看数据范围,就不是这么回事了,2409完全可以直接循环处理,但这题目n最大达100000000,显然会TLE,故需寻求更佳的解决方案。用欧拉函数进行优化:旋转:顺时针旋转i格的置换中,循环的个数为gcd(i,n),每个循环的长度L为n/gcd(i,n)。如果枚 阅读全文
posted @ 2011-02-16 16:26 AndreMouche 阅读(1126) 评论(0) 推荐(0) 编辑
摘要: POJ 2409 Let it Bead算法核心:polya 计数法,burnside定理http://blog.sina.com.cn/s/blog_6f71bea30100opru.html大意:珠子的颜色有c种,问可组成多少种长度为s的项链?分两种情况讨论:旋转:n种旋转方法每种旋转i个格(1#includeconst int N = 35;bool prime[N];void init(){ int i,j; memset(prime,true,sizeof(prime)); for(i=2;ib) { r=a;a=b;b=r; } while(a) { r=b%a; ... 阅读全文
posted @ 2011-02-16 16:23 AndreMouche 阅读(618) 评论(0) 推荐(0) 编辑
摘要: POJ 1252 Euro Efficiency大意:六种货币,面值都小于100。用这六种货币(可加可减)用最少的货币数组成1到100。求出这1到100中最大的,并求平均值。两个完全背包即可,一个付钱,一个找钱#include#includeconst int N = 10000+100+2;int dp[N];int a[6];int min(int a,int b){ if(a==-1)return b; return a=0;j--) if(dp[a[i]+1]!=-1) dp[j]=min(dp[j],dp[j+a[i]]+1); } __int64 ans = 0; ... 阅读全文
posted @ 2011-02-14 14:56 AndreMouche 阅读(527) 评论(0) 推荐(0) 编辑
摘要: POJ 3260 The Fewest Coins网上有篇很好的报告,觉得不错,就拷了些过来,(*^__^*) 嘻嘻……网址:http://www.cppblog.com/Davidlrzh/articles/135614.html题意:John去买东西,东西的价格是T(1 #includeconst int T = 14400+1;const int T2 = T+14400+2;const int N = 101;int change[T];//change[i]表示商店找钱i所需的硬币数int dp[T2];//dp[i]表示用户付钱i所需硬币数int c[N];int v[N];__i 阅读全文
posted @ 2011-02-14 13:44 AndreMouche 阅读(1020) 评论(0) 推荐(0) 编辑
摘要: ZOJ 3474 TaekwondoAuthor: HUANG, QiaoContest: ZOJ Monthly, February 2011H算法核心:贪心大意:已知:1.Alice 有n个敌人,现有的能量值为S2.每个敌人的基本信息:p1,p2,p3,r. 其中p1为消耗敌人3个积分所需要的能量 p2为消耗敌人2个积分需要的能量 p3为消耗敌人1个积分所需能量, r为消灭该敌人后所能获得的能量值3.消灭一个敌人至少需要消耗它的积分7个问Alice能否完全消灭这n个敌人,若能,求出Alice所能剩余的最大能量分析:1.对于每个敌人,计算出消灭它所需要的最小能量(只有三个状态,枚举p1,p2 阅读全文
posted @ 2011-02-14 10:17 AndreMouche 阅读(502) 评论(0) 推荐(0) 编辑
摘要: ZOJ 3468 Dice War2010ZOJ月赛B题大意:有两堆筛子,个数分别为a,b,求第一堆筛子点数和大于第二堆筛子点数和的概率算法DP,注意精度,比赛时就死在这里了~~~~(>_#includeconstint N =490;constint M =9;double dp[M][N];double sum[M][N];void init(){ int i,j,k; for(i=0;i=0;k--) sum[i][k]=sum[i][k+1]+dp[i][k]; }}int main(){ int a,b; init(); while(scanf("%d%d" 阅读全文
posted @ 2011-02-13 18:43 AndreMouche 阅读(437) 评论(0) 推荐(0) 编辑
摘要: POJ 3414 Pots大意:有两只桶,容量分别为a,b,对每只桶,有以下三种操作:1.Fill(i)装满第i只桶2.DROP(i)将桶i的水倒掉3.POUR(i,j),将桶i中的水倒入桶j,若桶j满,剩余的水遗留于桶i中问能否通过这些操作使得某只桶恰好装有容量为c的水?若能,输出最少操作次数及过程PS:c#include#includeusingnamespace std;constint N =101;struct pn{ int prex; int prey;}pre[N][N];struct node{ int a,b; int step; booloperatorBif(a==0| 阅读全文
posted @ 2011-02-12 20:59 AndreMouche 阅读(368) 评论(0) 推荐(0) 编辑
摘要: POJ 2479 Maximum sum算法核心:dp对于n个连续数字,在其中任意取出两个不重叠的连续段,求所有合法条件下该两个连续段和的最大值例如: n = 10,数字为:1 -1 2 2 3 -3 4 -4 5 -5 此时答案为13 ,即(2,2,3,-3,4)与(5)的和#includeconstint N =50000+1;int dp1[2];//dp[i]记录包含数字i的前i个数字的一段最大和int dp2[2];//dp2[i]记录前i个数字的一段最大和int dp3[2];//dp3[i]记录到包含数字i的两段最大和inline int max(int a,int b){ re 阅读全文
posted @ 2011-02-12 15:02 AndreMouche 阅读(460) 评论(0) 推荐(0) 编辑
摘要: POJ 2449 Remmarguts' Datehttp://poj.org/problem?id=2449算法核心:A*、dijkstra大意:求有向图中从s到t的k短路分析:1.用dijkstra逆向计算出所有点到t的最短距离dis[i]2.建立估价函数 f(i)= g(i)+h(i) 其中g(i)为从s到i的实际距离,h(i)为从i到t的最短路dis[i]3.使用上述估计函数用A*算法从s点出发BFS全图,用visited[i]表示点i的出队次数。 当visited[i]=k时,即找到从s到t的k短路为f(i) 其间若visited[i]>k则放弃该点4.注意:若s==t 阅读全文
posted @ 2011-02-12 14:03 AndreMouche 阅读(1363) 评论(0) 推荐(0) 编辑
摘要: http://watashi.ws/blog/1813/zojmonthly1101/ZOJ3457/ZOJ 3457 Absence Number大意:给定一个两位数N,求最小的m,使得1/m的十进制表示中恰好包含除N以外的所有两位数。最大的解是N=0时m=76344。题目的输入只有100种,所以可以暴力跑表,1/m十进制表示是循环小数,且在m步内开始循环,所以很容易求得其包含的所有两位数,最后判断一下是否满足条件就好了。注意不要漏数了两个循环节头尾组成的那个两位数,否则有几个数据会WA。更简单的方法是不判断循环节,直接循环m+1步。加上一些优化后,这个表实际可以在1s之内跑出。 但是我不会 阅读全文
posted @ 2011-02-11 22:30 AndreMouche 阅读(525) 评论(0) 推荐(0) 编辑
摘要: POJ 1681 Painter's Problem算法核心:状态压缩,枚举大意:有一面n*n的墙,对其中某一格子上色,则其上、下、左、右及自身的颜色均变色,颜色仅有黄色和白色两种,已知墙面信息,问能否将墙面全部变为黄色,若能,至少需要涂色几次?分析:1.通过状态压缩,枚举第一行的着色网格2.通过已知的第一行着色状态,根据上层信息依次推得下层着色状态3.对2退出的第n层着色状态进行判断,若合法,更新当前最小值。#include#includeconstint N =17;constint inf =99999;bool graph[N][N];//graph[i][j]存储最初的颜色, 阅读全文
posted @ 2011-02-11 22:22 AndreMouche 阅读(547) 评论(0) 推荐(0) 编辑
摘要: POJ 1948 Triangular Pastures题目描述:给最多40根木棍,每根长度不超过40,要用完所有的木棍构成面积最大的三角形,求出最大的面积。算法核心:二维01背包 使用到海伦公式: 已知三角形的三边长度a,b,c,求面积 S=√[p(p-a)(p-b)(p-c)] 而公式里的p为半周长: p=(a+b+c)/2 分析:用dp[i][j][k]表示到第i根木棒能否摆出边长分别为j,k的三角形 易得 dp[i][j][k] = dp[i-1][j-x[i]][k]|dp[i-1][j][k-x[i]]|dp[i-1][j][k]; 简单的空间压缩,化为二维dp,注意:这里每根.. 阅读全文
posted @ 2011-02-11 22:18 AndreMouche 阅读(875) 评论(0) 推荐(0) 编辑
摘要: POJ 3067 Japan核心算法:一维树状数组大意:Japan在东边有n座城市,从北到南编号依次为1,2,3...n在西边有m座城市,从北到南编号分别为1,2,3...m现要在南北城市之间修建k条超级高速公路,求会出现多少个十字路口(注:每个十字路口只能由两条交叉的路所构成)输入:T .....cases数 n,m,k 以下k行每行对应于一条高速公路,由两个数字(xi,yi)组成,xi对应于东城编号,yi西城编号输出:十字路口数目分析:1.对该数组先按y从大到小排序,若y相等,则按x从大到小排序2.从前往后扫描各条高速公路,对路(xi,yi)其与前面点的交点数目为其左上角路的个数,即所有的 阅读全文
posted @ 2011-02-10 19:39 AndreMouche 阅读(476) 评论(0) 推荐(0) 编辑
摘要: POJ 2418 Hardwood Species算法核心 二叉查找树题目大意:通过卫星得到了某一个区域的树名,将这些树名按字典顺序输出,并输出在树的总数中所占的比例,保留小数点后四位。主要思想:对每种树做统计,并计算出所占的比例并不难。难的是如何在规定时间内按字典顺序输出输入中涉及的树名。字典顺序可以启发我们用排序的方法解决,我们可以把树名作为关键字来比较大小,而strcmp函数也给了我们比较大小提供了条件。接下来就是要解决时间问题。如果用插入排序的算法由于大量的数据需要大量的比较,就会超时。所以这里借助了比较经典的数据结构,二叉查找树。那么我们就可以先对输入建树,然后再通过树的中序遍历来输 阅读全文
posted @ 2011-01-29 15:53 AndreMouche 阅读(680) 评论(0) 推荐(0) 编辑
摘要: POJ 3281 Dining核心算法:网络最大流大意:有n头牛,F种食物,D种饮料,第i头牛喜欢fi种食物,di种饮料,编号分别为。。。 已知一头牛最多能吃一种食物和一种饮料,每种饮料 或食物最多能被一头牛吃,求以上条件下,最多能有多少头 牛能吃到他所喜爱的食物和饮料建立模型: 建立网络流模型:1.对每种食物建立从源点指向它的一条边,流量为1 2.在牛与它所喜爱的食物间建立一条边,流量为13.在牛与它所喜欢的饮料间建立一条边,流量为14.对每种饮料建立一条指向汇点的边,流量为15.在上面的基础上,将牛拆点,在拆开的点间建立一条流量为1的边 在以上条件下,从源点到汇点的最大流即为答案 模型的分 阅读全文
posted @ 2011-01-29 13:23 AndreMouche 阅读(589) 评论(0) 推荐(0) 编辑
摘要: POJ 1185 炮兵阵地核心算法:dp状态压缩中文题分析:graph[i]存储第i行的地形,用一二进制数表示,山地对应位置为1,平地对应位置为0leg[N]中存放所有能够合法的单行安排状态,用二进制数表示,驻兵对应位置为1,不驻兵对应位置为0dp[i][j][k]表示第i行状态为j,i-1行状态为k时最多的哨兵数目,j,k均对应leg[]中状态dp[i][cur][p1] = getmax(dp[i][cur][p1],dp[i-1][p1][p2]+leg[cur].army);其中: p1为第i-1层的合法行存放状态 p2为第i-2层的合法行存放状态, cur为当前即第i层合法行存放状态 阅读全文
posted @ 2011-01-28 21:01 AndreMouche 阅读(813) 评论(0) 推荐(0) 编辑
摘要: HDU 1074 Doing Homework算法核心:状态压缩DP大意:有n门课程作业,每门作业的截止时间为D,需要花费的时间为C,若作业不能按时完成,每超期1天扣1分。这n门作业按课程的字典序先后输入问完成这n门作业至少要扣多少分,并输出扣分最少的做作业顺序PS:达到扣分最少的方案有多种,请输出字典序最小的那一组方案分析:n#include#includeconstint N =65536;struct node{ int cost;//所需要的时间int pre;//前一状态int reduced;//最少损失的分数}dp[N];//dp[i][j]表示在第i天完成作业信息为jbool. 阅读全文
posted @ 2011-01-28 14:21 AndreMouche 阅读(2206) 评论(0) 推荐(0) 编辑
摘要: POJ 3254 Corn Fields算法核心:状态压缩,DP题意:输入m行n列的数字,其中为1或者是01表示土壤肥沃可以种植草地,0则不可以。在种草地的区域可以放牛,但相邻的两块区域不允许同时放牛,问有多少种放牛的方法?(不放牛也算一种情况)分析:由m,n#include#includeconstint N =1>=1; if(legal[temp]==false) { legal[i]=false;break; } if((temp&1)&&((curt&1))) { legal[i]=false; bre... 阅读全文
posted @ 2011-01-27 21:39 AndreMouche 阅读(625) 评论(0) 推荐(0) 编辑
摘要: POJ 3735 Training little cats算法核心:矩阵建模,矩阵的快速幂大意:已知有n只猫咪,开始时每只猫咪有花生米0颗,先有一组操作:由下面三个中的k个操作组成:g i 给i只猫咪一颗花生米e i 让第i只猫咪吃掉它拥有的所有花生米s i j 将猫咪i与猫咪j的拥有的花生米交换 现将上述操作做m次后,问每只猫咪有多少颗花生米?分析:因m的数据范围较大,用矩阵连乘。构建矩阵模型,peanut[N] = {0,0,。。。。0,1}:即前n个数为0,最后一个数取1matrix[N][N],初始化条件下为单位矩阵,。。。对猫咪进行操作转化为在对矩阵peanut进行操作,一组操作过程 阅读全文
posted @ 2011-01-27 19:13 AndreMouche 阅读(1427) 评论(0) 推荐(0) 编辑
摘要: POJ 1806 Manhattan 2025大意:在一个三维空间里面,有一交通工具通过一单位长度需要一升汽油,现有n升汽油,画出该交通工具在各层的运输情况 将每一层简化为一个以交通工具所在位置为中心的二维网格图,在可达网格内写入到达该网格所需要的汽油数。 自底向上画出每一层所在的二维图。 当n>9时,不需要统计Example: n = 2 时,若标记当前这一层为0层,则该情况下交通工具所能达到的层次为-2层到2层,即共5层,分别为-2,-1,0,1,2层,将每一层的二维图输出即可。题目中要求将最底层即为1,那么在该情况下,上述各层对应为第1,2,3,4,5层,其中交通工具所在的位置为第 阅读全文
posted @ 2011-01-27 12:09 AndreMouche 阅读(668) 评论(0) 推荐(1) 编辑