自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Time is up , let's go .

愿我的生命有够多的云翳,来打造一个美丽的黄昏!

  • 博客(30)
  • 收藏
  • 关注

原创 常用函数

求最大公约数:int gcd(int a,int b){ int c=a%b; while(c) { a=b; b=c; c=a%b; } return b;}int gcd(int a,int b) { return b?gcd(b,a%b):a;} 求组合数公式:ll

2013-07-20 10:59:01 644

原创 hdu 3501 欧拉函数求和

题意:求小于n 的与n不互质的数的和。 小于n与n互质的欧拉函数的和 sum = n*(phi(n))/ 2;所以结果就是 ans= (n-1)*n / 2  - sum;#include#include#include#define ll long longconst int mod=1000000007;ll phi(ll n){ ll m=(ll)sqrt(n

2013-07-30 19:13:42 792

原创 hdu 2588 欧拉函数 &&hdu 2504

题意:x在1到n之间,求满足条件的gcd(x,n)>=m的x个数题解:设n=p*d   ;   x= q *d  ;  d为gcd(x,n) 则p与q互质。所以我们只需求d>=m时的 p,与p互质的数就是q的取值,即为x的取值 ,所以(n/p)的和即为答案。#include#include#includeconst int N=1e6;int num[N];int phi(int

2013-07-30 17:26:52 770

原创 hdu 1573 孙子定理

题意:在1 到n中求有多少个x满足 x%a【i】=b【i】。令任意固定整数为M,当M/A余a,M/B余b,M/C余c,M/D余d,…,M/Z余z时,这里的A,B,C,D,…,Z为除数,除数为任意自然数([span]如果为0,没有任何意义,如果为1,在孙子定理中没有计算和探讨的价值,所以,不包括0和1)时;余数a,b,c,d,z为自然整数时。1、当命题正确时,在这些除数的最小公倍数内

2013-07-30 10:41:39 739

原创 3613 kmp应用

题意:n组数据,先输入26个数,代表a到z每个字母对应的价值,然后一个字符串,求将字符串分成两个,如果是回文串这个字符串的价值是每个字母的和,不是回文串价值为0  最大价值。如  第一组样例 ,aba ,分成两个a 和ba ,a就是一个回文串。所以价值为1;题解求字符串的回文串前缀,和回文串后缀#include#include#include#includeusin

2013-07-29 13:24:33 522

原创 hdu 4614 线段树

题意:有n个花瓶,编号为0 到 n-1,有m的操作,每个操作输入k,a,b,k=1,表示从标号为a的花瓶开始连续插花,每个瓶插一朵。如果某个瓶被占用,就在这瓶后面的瓶插花,到编号为n-1的瓶还有花,就扔掉剩下的花,并输出 这部操作插花的第一个瓶编号和最后一个瓶标号,  k=2 表示在区间a b之间,把插的花扔掉,并输出扔掉花的数目,#include#include#includeus

2013-07-27 10:28:59 532

原创 hdu 4602 找规律

题意是:给你两个数   n  k,,问n的所有整数划分中,k出现的次数。题解:        1       2     3     4    5     6    7   当n=5时,28    12    5      2    1 n =6         64     28    12   5     2     1   ····························

2013-07-26 09:32:02 584

原创 hdu 3635 并查集

题意:有n个球在n个城市,刚开始,1号球在1号城市,依次2号球在2号城市。有两种操作,T  A B 将A球所在城市的球全部移到B球所在城市。   Q   A  查询A所在的城市,A求移动的次数,A所在城市的球的总数。并查集主要是路径压缩时,更改 移动的次数。如 子节点的移动次数等于加等于父节点的次数#include#include#include#includeusing

2013-07-24 14:57:40 589

原创 poj 3071 概率dp

题意是:有2^n支队伍,告诉你p【j】【k】表示j打败k的概率。求最后赢得比赛概率最大的队伍。dp【i】【j】 表示在第i回合,j获胜的概率此题需要注意的是比赛队伍的次序,第一回合:1和2 比赛,3和4 ,5 和6 ,7和8, 依次类推;if(((j>>(i-1))^1)==(k>>(i-1))) 判断j和k是否可以比赛;比如3支队伍,可以比赛的队伍是:0 1    1 0

2013-07-24 09:43:19 636

原创 poj 1456 贪心+并查集优化

题意:题目链接有n个商品,每个商品有两个属性val 和day,val表示商品的价值,day 表示商品最后卖出去的期限,卖每个商品需要一天的时间。题解:贪心,贪心测率和hdu 1789 一样。按照val从大到小排序。然后从第一个开始,如果它的最后期限没有被占用,这天就用来买这件商品,如果被占用就在这天之前找出第一个没被占用的。并查集的用处就是找可用的那天,把被占用的连续的天数看做一个集合,根

2013-07-23 19:06:28 545

原创 nyoj 项目安排

题意:小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项

2013-07-23 13:15:34 633

原创 zoj 3643 模拟栈

题意是:给两个字符串a和b ,在b中从左向右找a并删除该段字符串,直到找不到为止,共能删多少次。#include#include#define FF freopen("Input.txt","r",stdin)char m[512010],z[300],flag[512010];int main(){ //FF; int ans,top; while(~sca

2013-07-23 13:08:25 817 1

原创 zoj 3641 并查集

题意是:有n的操作,arrive  str1   m 然后m个数,表示str1到教室,并且他知道m信息,信息的标号为输入的m个数, share str1 str2 表示str1和str2 两个人交换两个人的信息。并且当第三个人与其中一个人交换信息时,另一个人也交换。即这三个人相互知道他们的信息。check str1 表示查询 str1这个人知道信息的条数。题解:并查集。#inclu

2013-07-23 11:34:58 529

原创 zoj 3645 高斯消元

题意是:给12个方程,形如 (a0-x0)^2 +(a1-x1)^2+ ·········+ (a10-x10)^2=d^2;利用嘴一个方程和上面11个方程相减,编程一次方程组 yoga高斯消元法解方程;#include#include#include#include#includeusing namespace std;#define FF freopen("Inp

2013-07-22 08:38:41 628

原创 zoj 3647 组合数学

给个n*m的方格,问有多少三角形,共线的不算。共有 (n+1)*(m+1) 个点,设为 t 。 从这里面选出3 个点,共有C(t,3)种,在水平上共线: ( (m+1)*fun(n+1,3) ) 在竖直上共线的有 ( (n+1)*fun(m+1,3) ),对于倾斜的情况,先枚举两端的端点,如图,在一个6*6的方格中选4*4的两个端点,其中可构成三点花线的另一点的个数为最大公约数gcd(

2013-07-20 10:56:13 644

原创 ubuntu 命令

sudo chmod -R 777 路径 更改文件夹的权限。sudo rm -r 删除命令。sudu mv 移动命令

2013-07-19 18:35:10 843

原创 poj 1849 贪心 ||树形dp

题意是:在m点有两辆车,要清扫所有的路,问走的最短路。和poj1935 差不多,poj 1935 是一个人走的最短路。题解 所有边权和 * 2  —— 树的最长路径。#include#include#include#includeusing namespace std;#define FF freopen("Input.txt","r",stdin)#define m

2013-07-18 17:17:44 579

原创 poj 1935 树形dp,

题意:一个人在m城镇,想参观这座城的k的城镇,求走过的最短路。题解:假设从m点出发,最后回到m点,则 len为所有点的权值和乘以2,如果不会到m点,应该停留在叶子节点,这个以节点一定离m最远的点,在这条最远的路上,只会走一遍。所以最后结果应为  len 减去离m最远的距离。#include#include#include#includeusing namespace std;#d

2013-07-18 11:10:53 513

原创 hdu 3586 树形dp +二分

题意:给n个节点的树,要求使叶子节点与根断开,割掉的边的权值和不超过m。求这些被割边的权值最大中的最小。dp 【u】+=min(dp【v】,w),w 为 u 到 v 的权值。如果w 大于二分的 mid dp【u】+=dp【v】;二分枚举边权。#include#include#include#includeusing namespace std;#define FF fr

2013-07-17 15:23:09 646

原创 zoj 3668 差分约束

题意:给定L,R ,A,B; 表示序列从L到R的和>=A  , 查分约束:  u---->v 建条边 ,则有dis( v ) sum【R】表示0到R的和。 则sum【R】 - sum【L-1】 >= A; sum【R】 - sum【L-1】   写成小于等于的形式 。sum【L-1】 - sum【R】  #include#include#include#includeusi

2013-07-16 10:54:05 555

原创 poj 1655树形dp && poj 3107 &&poj 2378 && poj 3140

题意:给你一个树,删除一个点后,形成的所有新树种,节点个数最多的点为被删点的balance,求最小的balance。用了两次dfs ,第一次求每个节点的子节点的个数(包括本身节点),存在num数组中。第二次dfs,dp【u】=max ( dp[ u ]  ,  n - num [ u ] , num [  v ]  )#include#include#include#in

2013-07-15 10:04:49 853

原创 hdu 1011 树形dp 背包

题意: 给定n和m,n为节点数,m为你拥有的士兵数,每个士兵可以消灭20个bug,每个节点有bug和values,消灭bug获得该节点的values获得 v  节点的values 必须先消灭v父节点的values。1为入口点,即根节点。dp【u】【j】;表示u节点 j个士兵获得的最大values。则状态方程为: dp [ u ] [ j ] = max ( dp [ u ] [

2013-07-13 18:34:33 640

原创 poj 1155 树形dp 背包

题意:求最多的用户量。dp【u】【j】代表节点u用户数为 j 时的花费。方程: dp[ u ] [ j ] = max ( dp [ u ] [ j ] , dp [ u ] [ j - k ] + dp [ v ] [ k ] - w ) ;#include#include#include#includeusing namespace std;const int N

2013-07-13 18:22:58 554

原创 poj 1947 树形dp 背包

题意:求得到p个点最少删除多少条边。p个点事连通的。题解:dp【u】【j】 以u为根得到j个点需要的最大价值。对于一个子节点 v 两种选择,要和不要。 不要的话,就删除u与v相连的边。 即dp【u】【j】+=1;要的话,即进行背包  dp【u】【j】=min(dp【u】【j】,dp【u】【j-k】+ dp【v】【k】);对于节点 u 我们没有考虑它的父节点,在最后求解时,dp【

2013-07-13 17:25:37 489

原创 hdu1561 树形dp 背包

解题很好想,状态方程  dp[ u ][ j ]=max( dp[ u ][ j ] ,dp[ u ][ j - k ] + dp[ v ][ k ]);此题还要建边,刚开始没想到建边,自己还写了个建边的以0为根,其实没必要,题目给的信息就够了。状态方程很好想,就是背包是的范围弄错了,调了老大会。#include#include#include#includeusing n

2013-07-12 10:17:20 751 1

原创 CodeForces 219D Choosing Capital for Treeland (树形dp)

题意是:给定n个点,n-1条有向边。求 使该点到所有点改变边方向最少,并输出那些点。题解:正向边权值为0,反向为1.第一次dfs记录每个点到所有子树中需要改变的边的条数。 (自下向上推)第二次dfs由父节点求子节点到所有点的需要改变的边的条数。(自上向下)#include#include#include#include#includeusing namespace std

2013-07-10 09:02:53 1296

原创 poj3342树形dp

和poj2342一样,只是加了判断最大值是否唯一。当dp2【s】>=dp1【s】时,若dp1【x】==dp2【x】;则不唯一。因为父节点不去更优。儿子节点去和不去都一样。结果就不唯一了。特殊考虑的是根节点,如果dp1【root】==dp2【root】 ,则不唯一,因为已经到根节点,不影响其他的点了。此题还可以建单向边,因为给定的条件是老板在后面,#include#include

2013-07-09 10:53:09 650

原创 hdu 2196 树形dp

题意:   求每个点的最远距离。树形dp,做了两天,感觉就是从子节点得到父节点。此题要用到两次dfs, 第一次dfs1用来求所有节点在他子树范围内到叶子节点的最长距离和次长距离。dp1,和dp2第二次dfs2 ,求f【】,如果dp1[s]==dp1[x]+len (s为父节点,x为子节点),则 x 在最长树的分支上,f[x]=max(f[s]+len,dp2[s]+len); 

2013-07-09 08:28:44 432

原创 树形dp poj1463

题意就是设置最少的哨兵,能够看到多有的路。二分图也能解决,即二分图最小点覆盖 用vector超内存了,#include#include#includeusing namespace std;#define MAXN 1600#define MAXE 300000struct Edge{ int v; // int next;}edge[MAXE];int

2013-07-08 10:07:37 455

原创 树形dp poj 2342

上午看了想了好长时间,下午用了一个多小时才写出来,主要对回溯没怎么写过。第一题 树形dp。题意就是有关系的两个人不能同时出现。dp1【s】 表示 s点去。dp2【s】 表示s点不去。dp1【s】+=dp2【x】。 //s点去,ze x点不去,s为父节点。dp2【s】+=max(dp1【x】,dp2【x】);// s点不去,则x去或不去的最大的一个。#include#i

2013-07-07 16:31:07 538

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除