- 博客(195)
- 收藏
- 关注
原创 生产者消费者线程
#include #include #include #include using namespace std; typedef int semaphore;/*信号量是一种特殊的整型变量*/ const int SIZE_OF_BUFFER=5;//缓冲区长度 const unsigned short PRODUCERS_COUNT=2;//生产者的个数 cons
2014-11-05 16:39:04 645
原创 HDU1521 排列组合 (指数型母函数)
题意:n,m,有n种物品每个物品有a[i]个,要求从中选出m件物品的排列数。指数型母函数,g=a0+a1/1!*x+a2/2!*x^2+...+ak/k!*x^k...指数型母函数详解#include #include #include #include#include#include#include#include #include#include
2014-09-10 17:15:45 714
原创 HDU 1384 Intervals (差分约束)
Sample Input53 7 38 10 36 8 11 3 110 11 1 Sample Output6题意:给你n个数u,v,w;要求在[u,v]区间至少取w个数(整数),求最少要取多少个数。S[v+1] - S[u] >= w, S[i+1] - S[i] >=0&&在u,v+1之间建一条边,跑一遍
2014-09-03 21:43:55 608
原创 HDU 3001 Travelling (三进制状态压缩 DP)
题意:有 n 个city,可以选择任一城市作为起点,每个城市不能访问超过2次,城市之间有权值,问访问全部n个城市需要的最小权值。思路:因为每个城市可以访问最多两次,所以用三进制表示访问的状态。详细见代码注释!!!!#include#include#include#include#include#include#includ
2014-08-13 22:50:10 694
原创 HDU 4539 郑厂长系列故事——排兵布阵 (状态压缩DP)
中文题,题意不再累赘。思路:对于第 i 行的放士兵,影响它的只有第 i-1 行和 i-2 行,所以暴力枚举符合这三行的状态 state[i],state[j],state[k]. 接下来就是二进制的巧妙应用了。具体题解看代码注释!!!#include#include#include#include#include#include#inc
2014-08-13 16:23:41 543
原创 HDU 4417 划分树+二分
题意:有n个数,m个询问(l,r,k),问在区间[l,r] 有多少个数小于等于k。划分树——查找区间第k大的数。。。。利用划分树的性质,二分查找在区间[l,r]小于等于k的个数。如果在区间第 i 大的数tmp>k,则往下找,如果tmp #include#include#include#include#include#include#inc
2014-08-11 22:05:02 647
原创 HDU 1503 Advanced Fruits (LCS,DP)
题意:给你两字符串s1,s2,用最短的字符串表示他们(公共字串输出一次)。Sample Inputapple peachananas bananapear peach Sample Outputappleachbananaspearchdp[i][j] : 第一个字符串的前 i 个 ,和第二个字符串的前 j 个最
2014-08-11 20:21:29 518
原创 划分树 模板
#include #include #include using namespace std; #define N 100500 #define MID ((l+r)>>1) int a[N],s[N],t[20][N],num[20][N],n,m; // void build(int lft,int rht,int ind)// {// if
2014-08-11 12:00:51 657
原创 HDU 3008 Warcraft
题意:一个人有100点血和100点魔法,Boss有100点血,人有n个技能,每个技能对Boss有a[i]点伤害,且会消耗b[i] 的点魔量,人每秒会有t秒魔法恢复(最大为100)Boss每秒有q点伤害,问人是否能先击败Boss若能,需要几秒。dp[i][tmp]:在第 i 秒 剩余 魔法为 tmp 时的伤害,tmp = 第i秒拥有的魔法 j - a[
2014-08-06 22:19:52 831
原创 HDU 1158 Employment Planning
题意:有一公司要工作n个月每个月需要至少p[i]个人工作,每个人的工资固定位m,每雇佣一个人要花费h,每炒掉一个人要花费f。求完成n个月工作,公司最小的花费。思路: Dp[i][j]为前i个月的留j个人的最优解;p[i]j>Max{p[i]}之后无意义,无谓的浪费 记Max_n=Max{p[i]};Dp[i-1]中的每一项都可能影响到Dp[i],即使p[i-1]所以利用
2014-08-06 16:23:20 601
原创 HDU 2059 龟兔赛跑
题意:中文题,不解释。思路:将长度为L分为n+2段:0,p[1],p[2]……,p[n],L.dp[i]为乌龟到第 i 段的最小时间,乌龟可以再0~i-1段选择充电后到达 i 的最小时间,然后分类讨论下。#include#include#include#include#include#include#include#include #incl
2014-08-06 15:11:28 532
原创 HDU 1160 FatMouse's Speed (最长有序的上升子序列)
题意:给你一系列个w,s,要你找到最长的n使得W[m[1]] and S[m[1]] > S[m[2]] > ... > S[m[n]]即在这n个w,s中满足w[i]s[j],要求:体重严格递增,速度严格递减,原始顺序不定首先将s从大到小排序,即顺数固定后转化为最长上升子序列问题.案例:6008 13006000 210050
2014-08-05 10:55:53 640
原创 PKU A Simple Problem with Integers (线段树区间更新求和)
题意:典型的线段树C,Q问题,有n个数a[i] (1~n),C, a, b,c在[a,b]区间增加cQ a b 求[a,b]的和。#include#include#include#include#include#include#include#include #include #include#includeusing namespace std;#defi
2014-07-30 20:19:49 622
原创 HDU 1698 Just a Hook (线段树延迟标记(lazy))
题意:有n个数初始值都为1,m个操作a,b,c,表示把区间[a,b]变为c,求最后n个数的和。经典区间更新求和问题,需要用到延迟标记(或者说是懒惰标记),简单老说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新或询问的时候。#include#include#include#include#include#include#inclu
2014-07-30 10:56:02 595
转载 (转)线段树经典讲解
线段树(notonlysuccess经典讲解)转载自:http://www.notonlysuccess.com/我最喜欢的线段树博文,没有之一。非常感谢notonlysuccess这么精彩的讲解。 线段树很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文 章了,觉得当时的代
2014-07-29 14:03:42 582
原创 HDU 3641 Treasure Hunting (素数拆分)
题意:有N个ai,bi,M=a1^b1*a2^b2*a3^b3…*an^bn ,求最小的 x 使得 x! % M ==0.思路:把M分成多个素数相乘,num[i] 记录素数 i 的个数,然后二分找到x,若 x! 中所有 i 的个数满足>=num[i]即为答案。#include#include#include#include#include#include#i
2014-07-28 21:12:36 749
原创 CodeForces 256A (dp)
A. Almost Arithmetical Progressiontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputGena loves sequences of n
2014-07-24 21:05:06 920
原创 HDU 4857 (反向拓扑排序 + 优先队列)
题意:有N个人,M个优先级a,b表示a优先于b,并且每个人有个编号的优先级,输出顺序。思路来自:与PKU3687一样在基本的拓扑排序的基础上又增加了一个要求:编号最小的节点要尽量排在前面;在满足上一个条件的基础上,编号第二小的节点要尽量排在前面;在满足前两个条件的基础上,编号第三小的节点要尽量排在前面……依此类推。(注意,这和字典序是两回事,不可以混淆。)如图 1 所示,满
2014-07-23 10:27:44 2361 1
原创 HDU 2844 Coins (多重背包)
题意:有n种面值的硬币a[i],每种硬币有c[i]个,问能组成不大于m面值(1~m)的个数。多重背包模板:by背包九讲。#include#include#include#include#include#include#include#include #include #include#includeusing namespace std;#d
2014-07-17 15:55:28 741
原创 HDU 1505 Largest Rectangle in a Histogram && HDU 1506 City Game(动态规划)
1506题意:给你连续的直方图(底边边长为1),求连续的矩阵面积。对每个直方图,分别向左向右进行扩展。#include#include#include#include#include#include#include#include #include #include#includeusing namespace std;#define
2014-07-16 20:23:21 608
原创 PKU 1509 Glass Beads (最小表示法)
题意:有一个环形字符串,让你找一个位置切一刀使得字符串字母序最小,输出这个位置。思路:可以看成两个字符串比较,一个是从下标0开始(0~n-1),一个从下标1开始(1~n-1,0)。然后两个指针i=0,j=1.从s[i]和s[j]开始比较第k个字符是否相同,当k==len时,返回i,j中的最小值.当s[i+k]和s[j+k]不相同时,若s[i+k]>s[j+k]则可见从s[i+1]到
2014-07-16 10:54:27 615
原创 PKU 3716 Panda's Birthday Present (概率问题)
题意:有4个骰子,每个骰子每面包含red或blue两种颜色,每次投掷4个骰子,red向上的数量为分数,现在给出第一次和第二次的分数,求第三次得分的期望。思路参考http://hi.baidu.com/bfcdygoporbjuxr/item/569897ddc1fc561d21e2503f#include#include#include#incl
2014-07-14 17:13:25 787
原创 HDU 4050 wolf5x (概率DP 求期望)
题意:有N个格子,1~N,起点在0,每个格子有一个状态(0,1,2,3),每次可以跨[a,b]步,问走完N个格子需要步数的期望,每次尽量走小的步数,即尽量走a步,不能则走a+1,……状态0意味着你不能踏进对应的网格。 状态1意味着你可以步入网格用你的左腿。 状态2意味着你可以步入网格用你的右腿。 状态3意味着你可以进入网格用任何你的腿,而接下来的步骤中,您可以使用任何的
2014-07-14 15:13:08 794
原创 HDU 4405 Aeroplane chess (概率DP求期望)
题意:有一个n个点的飞行棋,问从0点掷骰子(1~6)走到n点需要步数的期望其中有m个跳跃a,b表示走到a点可以直接跳到b点。dp[ i ]表示从i点走到n点的期望,在正常情况下i点可以到走到i+1,i+2,i+3,i+4,i+5,i+6 点且每个点的概率都为1/6所以dp[i]=(dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+d
2014-07-09 16:31:30 814
原创 HDU 4856 Tunnels (最短路+状压DP)
题意:给你N*N的网格,‘.’表示可以走,‘#’表示不能走,m条管道,每条管道有起点和终点坐标,Bob每次可以走到相邻的网格花费1s,问Bob走完m条管道要花多少时间;Bob在管道内不计算时间即计算Bob从管道 i 的出口走到管道 j 的入口的时间Dis(e[i],s[j])的最小和,起点可以任意;思路:看了题解说是状态压缩DP然后深入理解了下。首先
2014-07-08 21:22:13 745
原创 HDU 4403 A very hard Aoshu problem (DFS暴力)
题意:给你一个数字字符串,问在字符串中间加‘=’、‘+’使得‘=’左右两边相等。1212 : 1+2=1+2, 12=12;12345666 : 12+3+45+6=66, 1+2+3+4+56=66;#include#include#include#include#include#include#include#include#include#inc
2014-07-07 20:53:34 615
原创 HDU 4587 TWO NODES (双连通割点应用)
题意:N个点(0~n-1),M条无向边,问去掉2个点后最多的连通分块有多少。先去掉一个点求出各个割点,并在dfs过程中求出去掉这个割点有多少个连通分块(将iscut[u]=true改为iscut[u]++),这样子第二次就可以直接找出最多的连通分块了。#include#include#include#include#include#include#inclu
2014-07-05 21:47:19 679
原创 点-双连通分量模板
by:白书#define M 10000int pre[M],dfs_clock,iscut[M],low[M],bcc_cnt,bccno[M];vectorG[M],bcc[M];struct Edge{ int u,v; Edge(int from,int to) { u=from; v=to; }};stack S;int dfs(int u,int fa
2014-07-05 20:18:13 883
原创 HDU 3694 Fermat Point in Quadrangle (费马定理求四边形的费马点)
题意:给你四个点,找出一个点到四个点的距离最小四边形的费马点:凸边形是两对角线的交点,凹边形式凹点。PS:三角形的费马点:1.若三角形3个内角均小于120°,那么3条距离连线正好三等分费马点所在的周角,即该点所对三角形三边的张角相等,均为120°。所以三角形的费马点也称为三角形的等角中心。2.若三角形有一内角大于等于120°,则此钝角的顶点就是距离和最小的点
2014-07-03 19:28:51 1619
原创 HDU 3699 A hard Aoshu Problem (暴力搜索)
题意:题意:给你3个字符串s1,s2,s3;要求对三个字符串中的字符赋值(相同的字符串进行相同的数字替换),替换后的三个数进行四则运算要满足左边等于右边,求有几种解法。Sample Input2A A ABCD BCD B Sample Output572eg:ABBDE ABCCC BDBDE ;
2014-07-02 11:19:26 908
原创 HDU 3695 Computer Virus on Planet Pandora (AC自动机)
题意:有n种病毒序列(字符串),一个模式串,问这个字符串包含几种病毒。包含相反的病毒也算,字符串中[qx]表示有q个x字符。详细见案列。0 32ABDCBDACB3ABCCDEGHIABCCDEFIHG4ABBACDEEBBBFEEEA[2B]CD[4E]F Sample Output032
2014-06-30 20:17:45 695
原创 PKU 3667 Hotel (线段树,区间合并,最长连续区间)
题意:宾馆有N个房间(1~N),M个操作,a=1,输入b,表示N间房是否有连续的b间房,有输出最左边的房编号没有输出0,a=2,输入b,c表示房间b到c清空。模仿了大神的代码,敲了一遍,有些地方还要深入了解。#include #include #include #include #include #include #define
2014-06-30 15:35:39 854
原创 HDU 4597 Play Game (记忆化搜索)
题意:有两堆n张的卡片,每张卡片有一个得分,Alice和Bob轮流在两堆卡片的两端取卡片问Alice先手,取得分数最多为多少;#include #include #include #include #include #include #define M 50 #define LL long long using namespace
2014-06-29 22:10:35 585
原创 HDU 4499 Cannon (暴力搜索)
题意:在n*m的方格里有t个棋子,问最多能放多少个炮且每个炮不能互相攻击(炮吃炮)炮吃炮:在同一行或同一列且中间有一颗棋子。#include #include #include #include #include #include #define M 50 #define LL long long using namespa
2014-06-29 20:56:59 709
原创 HDU 4496 D-City (并查集)
题意:给你n个点m条边,问删除前i条边后有多少个连通分块。思路:从后往前操作,从后往前添加i条边等于添加完m条边后删掉前m-i条边,可知刚开始没有边,所以sum[m]=n;#include #include #include #include #include #include #define M 100010#define LL
2014-06-29 20:05:21 633
原创 PKU 2777 Count Color (线段树区间更新)
题意: 给你三个数:L (1 有T种颜色(1~T),然后有O个操作,初始板1~L的颜色为1,"C A B C"表示在区间A,B图上C颜色, "P A B" 表示询问A,B区间有几种不同的颜色。#include #include #include #include #include #define M 100000 #define L
2014-06-29 09:36:18 703
原创 HDU 1542 Atlantis (线段树求矩阵覆盖面积)
题意:给你n个矩阵求覆盖面积。思路:看了别人的结题报告给定一个矩形的左下角坐标和右上角坐标分别为:(x1,y1)、(x2,y2),对这样的一个矩形,我们构造两条线段,一条定位在x1,它在y坐标的区间是[y1,y2],并且给定一个cover域值为1;另一条线段定位在x2,区间一样是[y1,y2],给定它一个cover值为-1。根据这样的方法对每个矩形都构造两个线段,最后将所有的线段根据所定位
2014-06-28 17:14:51 996
原创 HDU 2795 Billboard (线段树单点更新)
题意:h,w,n:有一个h*w尺寸的木板,n张1*wi的海报,贴海报的位置尽量高,尽量往左,问每张海报贴的高度看到1 关键在怎么建树,这里我们对h进行分割,每个高度都有等长的w,我们从上往下贴,如果当前高度(在同一高度上l==r)的长度可以满足wi则可以贴,否则继续往下寻找。#include #include #include #include
2014-06-27 16:37:35 602
原创 PKU 2774 Long Long Message (后缀数组练习模板题)
题意:给你两个字符串,求最长公共字串的长度。by:罗穗骞模板#include #include #include #include using namespace std;#define M 303#define inf 0x3fffffff#define maxn 500000#define ws ww#define rank RANK#define F(x)
2014-06-27 14:35:22 785
原创 最长上升子序列模板
//最长上升子序列(n^2)//入口参数:1.数组名称 2.数组长度(从0开始)int LIS(int a[],int len){ int *dp=new int[len]; int ans=1; dp[0]=1; for(int i=1;i<len;i++) { int m=0; for(int j=0;j<i;j++) if(dp[j]>m && a[j]<a
2014-06-27 14:16:42 598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人