- 博客(54)
- 收藏
- 关注
原创 poj 3670 Eating Together dp
dp水题,直接贴代码。//poj 3670//sep9#includeusing namespace std;const int maxN=30024; int n;int a[maxN],b[maxN];int dp[maxN][4];int solve(int a[]){ int i,j; for(i=0;i<=n;++i) for(j=1;j<=3;++j)
2014-12-30 00:26:58 632
原创 poj 3646 The Dragon of Loowater 排序+贪心
水题,直接贴代码。//poj 3646//sep9#include #include using namespace std;const int maxN=20012;int a[maxN],b[maxN];int main(){ int n,m; while(scanf("%d%d",&n,&m)==2&&n+m){ int i,j; for(i=0;i<n;+
2014-12-29 23:24:04 842
原创 poj 3661 Running dp
题意:有n分钟时间,每分钟牛能跑d[i]路程,在每分钟,牛可以选择跑,这样疲劳度会+1,也可以选择不跑,这样疲劳度会-1(最少到0),问n分钟后疲劳度为0时最多能跑多远,注意牛要疲劳度为0才能继续跑。分析:设dp[i][j]表示i分钟结束奶牛疲劳度为j时能跑的最远距离,则转移有:dp[i-1][j-1]->dp[i][j]+d[i],dp[i][j]->dp[i+j][0];代码:
2014-12-29 20:33:57 644
原创 poj 3230 Travel 简单dp
题意:有n个城市,从城市i到城市j的花费为exp[i][j],有m天,第i天在城市j的收入为inc[i][j],每天可以选择留在当前城市或去下一个城市,问m天结束最多能有多少钱?代码:简单dp,dp[i][j]表示第i天结束在城市j能有多少钱。代码://poj 3230//sep9#include using namespace std;const int maxN=1
2014-12-29 13:19:34 872
原创 poj 3140 Contestants Division 树的遍历
题意:给一棵树,每个节点有一个值v,现在要去掉一条边,使分成的两棵树的v的和的差值最小。分析:水题,注意数据范围。代码://poj 3140//sep9#include using namespace std;const int maxN=200024;int n,m,e;__int64 sum,ans;struct Edge{ int v,next;}ed
2014-12-28 23:52:04 727
原创 poj 2895 Best SMS to Type 模拟
水题,直接贴代码。//poj 2895//sep9#include using namespace std;int map[200][2];char a[1024];int main(){ map[' '][0]=1,map[' '][1]=1; map['A'][0]=2,map['A'][1]=1; map['B'][0]=2,map['B'][1]=2; map[
2014-12-28 00:15:34 1371
原创 poj 3378 Crazy Thairs 树状数组+高精度+dp
题意:给一个长为n的序列,求里面长度为5的上升子序列有多少个。分析:树状数组c[i][j]表示以i结尾长度为j的序列数量,要用高精度。代码://poj 3378//sep9#include #include using namespace std; const int maxN=50012; pair x[maxN];int v[maxN];int
2014-12-27 23:08:44 774
原创 poj 2115 C Looooops 扩展欧几里得
题意:在while(x=a;x!=b;x+=c) statement;中,问statement会被执行多少次,计算在2^k下进行。思路:等价于计算同余式a+c*x=b(mod2^k)用扩展欧几里得算法。设g=gcd(a,b)在计算a*x+b*y=g过程中,x的结果可以用b/g调整,y的结果可以用a/g调整,因为a*(b/g)==b*(a/g)。代码://poj 2115//s
2014-12-26 19:07:19 747
原创 poj 2785 4 Values whose Sum is 0 哈希
poj 2785 4 Values whose Sum is 0 哈希入门题
2014-12-26 14:17:07 636
原创 poj 2761 Feed the dogs 划分树
题意:给长度为n的数组和m个区间,求这m个区间中第k小的数。分析:数组静态,区间和k动态,划分树的定义题,上模板。代码://poj 2761//sep9#include #include using namespace std;#define MID(a,b) (a+((b-a)>>1))const int maxN=100010;struct Node{ i
2014-12-25 23:22:50 579
原创 poj 3252 Round Numbers 数位dp
题意:给区间【a,b】,求【a,b】中二进制表示中0的个数大于等于1的个数的数的数量。思路:数位dp与分组(类)组合计数有异曲同工之妙。[0,10100)=[0,10000)+[10000,10100)=****+100**(*表示任意取),数位dp时要注意对10100,[0,10000)没有前导0,但在算[10000,10100)时用到的dp函数是包含前导0的,所以[0,10000)
2014-12-25 09:43:24 639
原创 poj 3095 Linear Pachinko 模拟水题
题意:给一个字符串,求小球随机放在上面进洞或到达两边之外的期望。分析水题,直接模拟。代码://poj 3095//sep9#include using namespace std;char a[128];int left(int pos){ for(int i=pos-1;i>=0;--i) if(a[i]=='.') return 1; else
2014-12-24 17:15:05 734
原创 poj 2584 T-Shirt Gumbo 二分图多重匹配
题意:有x个选手,每个选手有能接受的T恤号码,每种号码的T恤都有一定的数量,问是否有一种分配方案能让所有的选手都满意。分析;二分图的多重匹配问题,用匈牙利变形直接水。代码://poj 2584//sep9#include using namespace std;const int maxX=32;const int maxY=8;int cap[maxY],g[ma
2014-12-24 16:05:14 597
原创 poj 2215 Parliament 二维区间和
题意:给一个二维数组,查询(r1,s1),(r2,s2)确定的矩形中所有数的和。分析:dp水题,sum[r][s]表示从(0,0)到(r,s)确定的矩形中所有数的和。代码://poj 2215//sep9#include using namespace std;const int maxN=1024;int sum[maxN][maxN];int main(){
2014-12-24 15:10:52 842
原创 poj 1952 BUY LOW, BUY LOWER 最长下降子序列计数
题意:给n个数,求它的最长下降子序列长度和数量。分析:dp,计数的时候要避免重复计数。代码://poj 1952//sep9#include using namespace std;const int maxN=5012;int a[maxN];int dp[maxN];int num[maxN];int main(){ int i,j,n,ans=0,an
2014-12-24 13:40:03 827
原创 poj 3734 Blocks 组合计数
题意:给长度为n的串,串中每位可用0,1,2,3,求0的个数和1的个数都为偶数的串数。思路:组合计数,4^n=(2+1+1)^4,ans=sum[i=0...n](c(n,i)2^i*sum[k=n-i且为偶数,t=0,2,...k](c(k,t) );最后推出4^(n-1)+2^(n-1)。代码://poj 3734//sep9#include using name
2014-12-23 10:21:24 555
原创 poj 3281 Dining 最大流
题意:有n头牛,每头牛都有自己喜欢的食物集和饮料集,现在提供1到f类型的食物各一个和1到d类型的饮料各一个,问最多有多少牛的食物和饮料需求能被同时满足。分析:最大流,一开始v-n-f-f-d-s建图老wa,后来想可能是f-d之间的边连错了,毕竟f-d之间的关系没有明确给出,后来发现n-f和n-d之间的关系是明确给出的啊,所以要把牛放中间,食物和饮料放两边见图:v-f-n-n-d-s。
2014-12-23 08:31:54 651
原创 poj 1780 Code 有向图输出欧拉路径+非递归深搜
题意:给一个数字n,n位数的密码最多有10^n个,现在要求一个字符串包含这10^n个串恰好各一次且字典序最小。分析:把每个可能的串看作边,构成这个串的两个n-1位数看作点则转化为欧拉路径问题,比如n==4时有u=423,v=239,e=4239.这题用递推会暴,要使用dfs的非递归写法:while(1){if(栈中结点无法再扩展)将栈中结点放入close表,出栈(栈为空退出);wh
2014-12-22 10:17:00 889
原创 poj 1300 Door Man 无向图欧拉路径存在判断
题意:给n个房间和m道门以及起点,问是否可以从起点到0号房间,经过每道门恰好一次。分析:把门看作边则是无向图是否存在欧拉路的问题。代码://poj 1300//sep9#include using namespace std;const int maxN=32;char s[1024];char tmp[20];int start,n,cnt;int d[max
2014-12-19 19:26:19 766
原创 poj 1386 Play on Words 有向图欧拉路径判断
题意:给n个单词,问是否可以将他们排成一排,使得前一个单词的末字符和后一个单词的首字符相同。分析:把每个单词看成一条边,转化为有向图是否存在欧拉路径问题。代码://poj 1386//sep9#include #include #include #include #include using namespace std;const int maxN=30;in
2014-12-19 17:16:44 1019
原创 poj 1975 Median Weight Bead floyd算法
题意:给n颗豆和m个重量关系,要求有几个豆不可能是重量排在第n/2个的。分析:在原图和他的逆图上两次floyd算出对每颗豆有多少豆比它重和比它轻。代码://poj 1975//sep9#include #include using namespace std;const int maxN=1024;int vis[maxN];int heavier[maxN],
2014-12-18 00:21:16 541
原创 poj 2021 Relative Relatives 排序
题意:给m个三元组(str1,str2,age)表示孩子str2比父亲str1大age岁,要将所有人按年龄从大往小输出,如有年龄相同的情况按字典序从大到小输出。分析:用map将每个人与一个id对应,求出年龄后不需要在每个人的信息上直接排序,可以在id上间接排序。代码://poj 2021//sep9#include #include #include #include
2014-12-17 17:59:08 571
原创 poj 1112 Team Them Up! 二分图染色+dp
题意:给n个人和一些认识关系,要将这n个人分成两队,每队的人之间都互相认识,求一种方案使两队的人数差最小。分析:对原图求逆得到新图g,g中如果有边(a,b),那么a,b不能在一个队,对新图进行二分图染色就能求得一种方案了。但题目要使人数差最小,所以还要dp一下。dp[i][j]表示前i个连通分量获得j个人的队伍是否可行,这其实是个背包问题,每个物品有多种重量,问是否能获得一个特定的重量
2014-12-17 12:03:37 697
原创 poj 1659 Frogs' Neighborhood 度序列可图化 贪心
题意:对一个无向图给出一个度序列,问他是否可简单图化。分析:根据Havel定理,直接贪心即可。代码://poj 1659//sep9#include #include using namespace std;struct Node{ int num,ids;}p[16];int ans[16][16]; int n;int cmp(Node a,Node
2014-12-17 08:48:16 878
原创 poj 3592 Instantaneous Transference 强连通缩点+在DAG上dp求最长路
题意:给一个地图,在每一点只能向下或向右走,其中标有‘*’点上有传送门可以传送到他指定的位置,标有数字的点上代表在该点可以得到的矿石,标有‘#’的点代表这点不能走,求从(0,0)点开始能最多获得多少矿石。分析:因为有传送门所以图中可能有环,缩点后在所得的DAG中求最长路就可以了。代码://poj 3592//sep9#include #include using nam
2014-12-16 22:14:23 691
原创 poj 3249 Test for Job 图上dp(记忆化搜索)
题意:给一个n个点的DAG,每个点有一个值p,现在要在图上找一个入度为0到出度为0的路径,使路径上的点的p值和最大。分析:dp[v]记录以点v为起点能获得的最大值,搜一遍即可。代码://poj 3249//sep9#include using namespace std;const int maxN=100024;const int maxM=1000024;int
2014-12-15 18:49:20 833
原创 poj 3683 Priest John's Busiest Day 2-sat
题意:有n场婚礼,每场婚礼的属性有开始时间,结束时间,和祷告持续时间,每场婚礼的祷告必须安排在婚礼的开始或者结束,问是否存在一种安排使得每场婚礼的祷告互不重叠,有的话输出安排方案。分析:n场婚礼,每场婚礼的祷告只能在开始或结束,2-sat问题,建图时采用互斥排定思想,即如果时间段i与时间段j互斥,则加i到非j、j到非i两条边。代码://poj 3683//sep9#incl
2014-12-15 17:25:09 601
原创 poj 3648 Wedding 2-sat
题意:给n对夫妻安排座位,每对夫妻相对而坐,给出m对特殊关系,有特殊关系的人不能一起坐在新娘对面。分析:2-sat+输出解。代码:#include #include #include #include using namespace std;const int maxN=1024;const int maxM=42000;int e,e1,n,m,t,ecnt;
2014-12-11 19:11:34 582
原创 poj 3207 Ikki's Story IV - Panda's Trick 2-sat
题意:在一个圆上有n个点,m条边将他们相连,问是否有一种连发使没有两条线相交。分析:每条线要么在圆内,要么在圆外,2-sat问题。代码://poj 3207//sep9#include #include using namespace std;const int maxN=10024;const int maxM=4200000;int e,n,m,t,ecnt;
2014-12-08 13:58:51 670
原创 poj 3905 Perfect Election 2-sat
题意:有n个候选人和m张选票,每张选票上有一种限制,问是否有一种让m张选票上的限制都满足的选举方案。分析:2-sat判断是否有解,不需输出解,标准化操作。代码://poj 3905 //sep9#include #include using namespace std;const int maxN=2024;const int maxM=2200000;int e
2014-12-08 11:00:44 592
原创 poj 3678 Katu Puzzle 2-sat
题意:给一堆布尔表达式,问是否存在解。分析:2-sat的入门题,只需判断是否有解,不要求输出解。代码://poj 3678//sep9#include #include using namespace std;const int maxN=10024;const int maxM=4200000;int e,n,m,t,ecnt;int head[maxN],i
2014-12-07 21:37:36 670
原创 poj 2771 Guardian of Decency 最大独立集
题意:有n个人,其中有一些人在一起会搞呢飞起,现在他们要出去玩,求最多能去多少人。分析:若两个人会搞呢飞起则他们之间有一条边,转化为求最大独立集问题(二分图。。)。代码:#include #include using namespace std;const int maxN=512;struct Stu{ int h; string gender,music,s
2014-12-07 00:37:57 598
原创 poj 2366 Sacrament of the sum 尺取法的灵活运用
题意:给一个升序数列和一个降序数列,判读是否能从中各取一个数,使他们的和为10000.思路:尺取法是一种求最小区间的算法,通过设置不前移的指针p和不后移的指针q来求满足某个条件的最小区间。类似地,设置两个不前移的指针p,q,可设计O(n)算法。代码://poj 2366//sep9#includeusing namespace std;const int maxN=40
2014-12-06 22:45:36 900
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人