自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Vector

Smile because it happened .

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

原创 排列组合

●相异元素不允许重复的排列组合数:    A(n,m)=n!/(n-m)!   C(n,m)=n!/((n-m)!*m!)   推广一下:    C(n,m)=C(n-1,m-1)+C(n-1,m)     C(n,m+1)=C(n,m)*(n-m)/(m+1)●有重复元素的排列数:  设第i个元素有ki个,所有元素共n个,设排列数为x ,  则 k1! *

2013-11-04 15:28:35 963

原创 2-SAT

1.构图2.求图的极大强连通子图3.把每个子图收缩成单个节点,根据原图关系构造一个有向无环图4.判断是否有解,无解则输出(退出)5.对新图进行拓扑排序6.自底向上进行选择、删除HDU 3622题意:给n对炸弹可以放置的位置(每个位置为一个二维平面上的点),每次放置炸弹是时只能选择这一对中的其中一个点,每个炸弹爆炸的范围半径都一样,控制爆炸的半径使得所有的

2013-11-03 21:51:05 786

原创 [模板]图论

各种Tarjan:强连通分量+缩点:void Dfs(int u){ Low[u]=Pre[u]=++Dfs_t; S.push(u); for(Node *i=G[u].nxt;i;i=i->nxt) { int v=i->to; if(!Pre[v]) { Dfs(v); Low[u]=min(Low[u],Low[v]); } else

2013-10-31 07:52:22 638

原创 [01分数规划]分数规划,最优比率生成树,最优比率生成环

分数规划:有n种物品,每种有v和c两种属性,选出m种使得(Σvi)/(Σci)最大。#include #include #include #include using namespace std; const double eps=1e-7; int n,m,ansv,anst; struct node {

2013-10-27 21:39:25 1095

原创 [双连通分量][DP]免费航班

题目大意:    小Z在MOI比赛中获得了大奖,奖品是一张特殊的机票。使用这张机票,可以在任意一个国家内的任意城市之间的免费飞行,只有跨国飞行时才会有额外的费用。小Z获得了一张地图,地图上有城市之间的飞机航班和费用。已知从每个城市出发能到达所有城市,两个城市之间可能有不止一个航班。一个国家内的每两个城市之间一定有不止一条飞行路线,而两个国家的城市之间只有一条飞行路线。小Z想知道,从每个

2013-10-22 17:27:05 1453

原创 [数论]jb数2

题目大意:定义jb数为:一个数分解质因数后,所有质因子的和。例如jb(4)=4,jb(5)=5,jb(6)=5等。现给出一个范围,求出这个范围内jb数的和。由于这个数可能过大,只需要求出这个数模1919的值就可以了。solution:已知一个数a和质数b,如果a % b=0,那么Jb[a]=b+Jb[a / b]可以类似筛法的求出每个数是由哪个质数的到的

2013-10-19 21:31:05 719

原创 [DP] [Usaco2008 Feb]Making the Grade 路面修整

题意大意:花最少的代价将一个序列变为不下降序列solution:保证最优:每个值修改后还会是原序列中的值。序列s为h[i]排序后序列。f[i][j]表示a序列前i个数变为不下降序列且h[i]被改成s[j]的最小代价。f[i][j]=min{f[i-1][k]}+abs(s[j]-h[i])(1开g[i][j]记录min{f[i-1][k]}。

2013-10-19 21:15:34 1517

原创 [模板]运算类

高精度:#include#include#include#include#includeusing namespace std;const int M=10000,P=4;struct BigNum{ int n[5000],l; void Init(){l=1;}//----------------------------------------- BigNu

2013-10-18 11:12:55 684

原创 [DP]最长公共上升子序列LCIS

#include#include#includeusing namespace std;int T,n,m,f[510];long long a[510],b[510];int main(){ scanf("%d",&T); while(T--) { scanf("%d",&n); memset(f,0,sizeof(f)); for(int i=1;i<=n;+

2013-10-17 17:42:03 665

原创 [并查集]染色问题

题目大意:平面上有n个珠子排成一排, 每个珠子初始颜色为0,你要对他们进行m次染色,每次你选定l和r,然后把[l,r]之间的珠子染成编号c的颜色,每个珠子的最终颜色为它曾经染过的编号最大的颜色,统计每个珠子最终的颜色。由于数据较大,为了减少输出所用的不必要的时间,请采取以下方法输出:假如a[i]为第i个珠子的最终颜色for i := 1 to n do ans := (an

2013-10-17 08:30:37 1488

原创 [DP]猪仙修桥(带权LIS)

题目大意:已知河两岸的哪两个点之间可以修桥和修这个桥的价值,桥的高度都是一样的,所以任意两座桥不能交叉。 求在能修最多桥的情况下桥的最大价值。 solution:按左右端点前后双关键子排序,在O(n2)LIS的基础上加入权值判断记F[i]为当前位最长子序列长度,G[i]为价值如果F[i]则F[i]=F[j]+1;G[i]=G[j]+v[i];

2013-10-17 07:52:22 1692

原创 [DP]集合

题目大意:对于一个集合S={1,2,3,……,n},他有2^n个子集。对于每个子集T,我们给定他的得分为F(T)。现让你寻找一个S的子集T,使得T的所有子集的得分和尽可能大。输入数据第一行有一个正整数n。随后的2^n行,按“二进制序”从小到大给出每个子集的得分。例如n=3时,就是按照{}、{1}、{2}、{1,2}、{3}、{1,3}、{2,3}、{1,2,3}的顺序给出的。

2013-10-17 07:43:11 700

原创 [并查集]最优路线

题目大意:给定一个n点m边的无向图,一个起点s,一个终点t请你找一条从s到t的路径,保证路径上边的最大权值与最小权值的比值最小如果有,输出比值,否则输出"IMPOSSIBLE"n solution:O(m2)的枚举很好想到  ..O(mlongm):1.按边权值排序,标号1~m2.初始化一个枚举

2013-10-16 15:45:32 815

原创 [邻接表] = =

struct Node { int v; int w; Node *nxt;}G[200010],Poor[200010];inline void Push(int u,int v,int w){ Node *t=&Poor[++cnt]; t->v=v; t->w=w; t->nxt=G[u].nxt; G[u].nxt=t;}for(N

2013-10-16 15:03:16 727

原创 [贪心][Usaco2010 Mar]balloc 农场分配

Mar]balloc 农场分配">solution:我们将所有区间按照左端点排序后,从右往左,能添加则添加不能就不添加,这样贪心是正确的。因为我们可以维护两个性质:1.最大性2.方案对后面的区间一定是最优的。证明略。能这么做的原因是因为这道题是无权的。假如区间有权的话,那么等价于选出K条路径,路径上每个区间不相交且权值最大,可以用费用流做。#

2013-10-15 21:49:42 1054

原创 [树Dfs][Usaco2010 Mar]gather奶牛大集会

题目大意:  Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在 N(1solution:1、将树看成以1为根的一棵有根树。2、用一个s[N]记录该节点以下的牛的个数。3、用一个a[N]表示该节点为聚会地点时,奶牛们的不方便程度。那么有:s[ i ]=v[i]+s[ s(i

2013-10-15 21:43:34 712

原创 [堆]种树

在n个数中选出至多k个数,且两两不相邻,并使所选数的和最大。很容易想到动规思路:f[i][j]表示种到第i棵树且种了j棵的最大获利,则f[i][j]=max(f[i-1][j],f[i-2][j-1]+a[i]),注意边界、初始化即可。但是,对于n我们先进行小规模枚举:k=1时,显然取n个数中取最大的即可(暂不考虑全负的情况)。设最大的数是a[i]。k=2时,则有两

2013-10-12 21:50:27 624

原创 [DP][USACO Open11] 修剪草坪

f[i]=min{f[j]}+a[i]f[i]表示前i头奶牛满足条件且不用第i头奶牛的最少损失res=总收益-最少损失单调队列#include#includeusing namespace std;int a[100010],n,t,h,k;long long f[100010],s;long long res=99999999

2013-10-10 19:58:30 1383

原创 [字符串]字符串中的替换

#include#include#include#include#includeusing namespace std;int n;string::size_type pos=0;string::size_type a;string::size_type b;string s[10];string t[10];string r;int main(){ scanf("%

2013-10-10 19:00:41 751

原创 [强连通]Smartoj P2395 集合

假设有N个集合,现在有M个包含关系,形如A⊆B,意思是集合A包含于集合B。显然,我们知道,A⊆B且B⊆A,就可以推出A=B,即A、B两个集合是相等的。;类似的,如果A⊆B,B⊆C,C⊆A,那么有A=B=C成立。至少要验证多少对集合的包含关系(同样,形如A⊆B,为一个包含关系)。solution:求至少添加多少条边后能使原图变为强连通图。Trajan缩点后 Max(入度为

2013-09-21 16:19:42 1045 1

原创 [矩乘]K步最短路

把矩乘换成floyd ..#include#includeusing namespace std;const int INF=9999999;int n,k,S,T;string m;struct mat{ int m[101][101];}unit,a;mat mul(mat a,mat b){ mat t; for(int i=0;i<n;++i)

2013-09-21 12:03:08 935

原创 [割边]Freda的迷宫

描述 DescriptionFreda是一个迷宫爱好者,她利用业余时间建造了许多迷宫。每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接相连,走廊都是双向通过。黄昏时候,Freda喜欢在迷宫当中漫步。每天,Resodo都会为Freda设计一个挑战方案。Resodo会指定起点和终点,请Freda来找到一条从起点到终点的简单路径。一条简单路径定

2013-09-17 21:00:20 850

原创 [NOIP模拟]Day1

一:有n块木板,想作为m个用途使用,但是每一个用途的木板一定要比其他所有用途的木板数量少,否则会造成浪费。算出这个方案数,由于这个数可能很大,你只需要告诉他答案模10^9+7的值。solusion:DP,设f[i][j]为前i个用途用j个木板的方案数f[i][j]=Σf[i-1][k],k∈(1,min(s,j-i+1))。s=(n+1)/2-1。

2013-08-28 15:23:23 639

原创 [KMP]匹配长度恰为x的位置数

描述 Description给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度。给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个。N,M,K输入格式 InputFormat第一行三个数 N,M,K,表示A的长度、B的长度和询问数。第二行为串A。第三行为串B。接下来K行,每行1个数X。

2013-08-28 09:40:59 886

原创 0-1分数规划

输入数据第一行为一个整数n,m,表示调料种数和能加入的调料数。接下来2行,每行为n个数,第一行第i个整数vi,第二行第i个整数ci。一个整数T,表示最大(Σvi)/(Σci),保留三位小数。0-1分数规划:设最终答案为R,x[i]为0或1,则 Σ(v[i]*x[i]) / Σ(c[i]*x[i]) 即

2013-08-26 15:56:23 670

原创 左偏树

我们定义节点i为外节点,当且仅当i的左子树或右子树为空。一个节点的距离为他到他后代中,最近的外节点所经过的边数。特别的,如果一个节点本身为外节点,则这个节点的距离为0。一棵子树的距离为这棵子树根节点的距离。(为了方便,可将空节点的距离为-1。)左偏树的左偏性质即左偏树的每个节点左子节点的距离都不小于右子节点的距离。//----------------

2013-08-24 11:09:55 650

原创 Miller–Rabin 素性测试

判断一个数p是否为素数(p首先得为大于等于2的正整数才有可能为素数),首先判奇偶,若为偶数只有2为素数,若为奇数(这里可以考虑去掉 3甚至5的倍数),则先求出d。对于每一个底a,让d不断乘以2直到为(p-1)/2,在此过程中(包括原本的d与d=(p-1)/2时的情况),设t为a的d次方模p的余数。(1)当t=-1时跳出,声明p有可能为素数;(2)当t=1时,若d为奇数,跳出声明p有可能为素

2013-08-22 17:47:11 878

原创 [DP]Tower

描述Rainbow和Freda要在Poetic Island市的一座山脚下盖房子定居了……盖房子需要钢材,幸运的是,这里有排成一行的n座废弃的铁塔,从左到右编号为1~n,其中第i座的高度为h[i]。Rainbow和Freda想盖一座上面小下面大的城堡,并且城堡的层数尽可能多。因此,他们要把这些铁塔分成尽量多组,每组内的铁塔编号必须是连续的,并且从左到右各组内铁塔的高度之和单调不减。但是

2013-08-18 09:11:57 1345

原创 String与数字及大小写转换

数字转字符串 #include #Include string num2str(int i){ stringstream ss; ss<<i; return ss.str();}字符串转数字:int str2num(string s) { int num; stringstream ss

2013-08-11 00:14:34 1150

原创 AC自动机模板

#include#include#include#includeusing namespace std;struct node{ int fail; int next[26]; int c; void newnode(){memset(next,-1,sizeof(next));fail=-1,c=0;}}a[2000000];int num;char s[100000

2013-08-11 00:09:52 543

空空如也

空空如也

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

TA关注的人

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