自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 矩阵快速幂模板

//矩阵快速幂struct matrix{ int a[maxn][maxn]}origin,res;matrix mult(matrix x,matrix y){ matrix temp; memset(temp.a,0,sizeof(temp.a)); for(int i = 1;i <= maxn;i ++) for(int j = 1;j <= maxn;j

2015-07-25 17:12:35 254

原创 HDU 3853

概率DP,转移方程:dp[i][j]=p1[i][j]*dp[i][j]+p2[i][j]*dp[i][j+1]+p3[i][j]*dp[i+1][j]+2;化简后可得: dp[i][j]=(p2[i][j]*dp[i][j+1]+p3[i][j]*dp[i+1][j]+2)/(1-p1[i][j]);需要特判一下p1[i][j]==1的情况.#include #include u

2015-07-25 15:55:49 456

原创 POJ 3259

求是否存在负圈环~ 把NO写成了N0,调了一下午orz~~#include #include #include using namespace std;#define inf 0x7ffffffint n,m,s,k;int d[510];struct Edge{ int u,v,w;}edge[5300];int bellmanford(){ int flag;

2015-07-24 16:20:35 264

原创 POJ 1860

需要判断是否有正权环存在,Bellman-Ford算法就可以辣~AC代码:#include #include #include #include using namespace std;struct Edge{ int u,v; double r,c;}edge[210];int n,m,s,k;double w;double d[105];int bellm

2015-07-22 20:34:21 506

原创 POJ 1797

题意:求从起点到终点的所有路径中,最短边的最大值~思路:dijkstra算法~  变形~d[i]表示从起点到i点的最短边。

2015-07-22 17:11:31 269

原创 POJ 3660

题意:给出任意两头牛在比赛中的位次关系,求根据所给的数据,能确定几头牛的rank~思路:求有向图的传递闭包问题~   简单说,传递性就是如果点i和点k连通,点k和点j连通,那么点i和点j也连通~由此我们就可以判断出图中任意两点是否相连。 这道题可以用floyd算法求解,最后判断所有与某个点相连的点的个数是否等于n-1,就可以得出结果辣~AC代码:#include #include

2015-07-22 16:08:22 612

原创 POJ 3268

题意:所有牛要去X那里参加聚会,每头牛都走的是最短路,求往返的最长时间~(给出的边是单向的)思路:dijkstra算法~ 所有牛从X返回时,可看做是求以X为起点的最短路,所有牛去X时,可以将邻接矩阵转置一下~两次结果求和,再取最大值即可~AC代码:#include #include #include using namespace std;#define inf 0x7

2015-07-22 15:25:32 466

原创 POJ 2253

题意:求解从起点到终点的所有路径中,最长边最小是多少?思路:dijkstra算法变形,用d[i]表示某条路径中的最长边即可。AC代码:#include #include #include #include using namespace std;#define inf 0x7ffffffdouble edge[205][205];double x[205],y[205],

2015-07-22 10:33:57 623

原创 POJ 2387

求最短路,套模板即可~#include #include #include using namespace std;#define inf 0x7ffffffint w[1005][1005],v[1005],d[1005];int t,n;int dijkstra(int s){ int p,minn; memset(v,0,sizeof(v)); for(int

2015-07-21 18:25:51 441

原创 HDU 1260

题意:给出一些人买票的时间,可以一个人买,也可以相邻两人一起买,求所有人买完票的最短时间。思路:一维DP,dp[i]表示第i个人买票所需要的时间,这个人可以和前一个人一起买,也可以自己买。状态转移方程:dp[i]=min(dp[i-1]+t1[i],dp[i-2]+t2[i-1]),然后再注意初始化和对时间的处理就行了。AC代码:#include #include #inclu

2015-07-20 20:30:40 928

原创 HDU 1257

题意:求拦截住所有导弹所需要的最少的拦截系统。思路:贪心大法(or DP)。之前的思路有误:想的是每次遇到一个比当前拦截系统的高度要高的导弹时,就重新开一个拦截系统。这并没有完全利用拦截系统。正确的思路:保存下所有拦截系统当前所能发射的最高高度,当遇到一个导弹时,选择距离它高度最近的拦截系统去拦截!从前往后扫就保证了这一点。AC代码:#include #include using

2015-07-20 19:25:28 504

原创 POJ 2533

题意:求最长递增子序列的长度,裸题。思路:DP即可。AC代码:#include #include #include using namespace std;#define maxx 1005int main(){ int n,v[maxx]; int dp[maxx]; while(scanf("%d",&n) != EOF) { for(int i = 1;

2015-07-20 11:58:20 503

原创 POJ 3186

思路:刚开始以为是贪心,结果发现当两端的数字相同时就不知道该怎么取了。 区间DP,从里向外推就可以了。AC代码:#include #include #include #include using namespace std;#define maxx 2010int dp[maxx][maxx];int main(){ int n,v[maxx]; while(sc

2015-07-20 11:41:02 389

原创 HDU 1114

裸题:完全背包问题,求装满背包的最小价值。注意初始化,要求完全装满,除了容量为0的背包外,其他全部赋值为inf。AC代码:#include #include #include #include using namespace std;#define inf 0x7ffffffint main(){ int t,e,f,n; int w[505],v[505],dp[1

2015-07-20 09:55:34 570

原创 HDU 1087

题意:求上升序列的最大和。思路:简单DP。两重循环:dp[i]表示以v[i]结尾的最大和,状态转移方程dp[i]=max(dp[j]+v[i],dp[i]) (在v[j]AC代码:#include #include #include #include using namespace std;int main(){ int n,dp[1005],v[1005]; whil

2015-07-19 11:38:41 435

原创 HDU 1074

题意:给出了一堆科目,必须要完成的时间和完成某科所需要的时间,超过一天扣一分,求最少要扣的分数。思路:刚开始一直以为是贪心,却一直贪不出来~~ 看了别人的题解,才顿悟啊~ 状压DP,用二进制来表示某个科目的完成状态。比如样例一: 用111表示三科都完成了,101表示第一科和第三科完成了,这样就很easy~\(≧▽≦)/~啦啦啦。for(int i=1;ifor(int j=n-1;

2015-07-19 10:20:24 661

原创 HDU 1159 && POJ 1458

最长公共子序列,状态转移方程见代码。#include #include #include using namespace std;char s1[1005],s2[1005];int dp[1005][1005];int main(){ while(scanf("%s",s1+1)!=EOF) { scanf("%s",s2+1); memset(dp

2015-07-18 09:57:35 493

原创 HDU 1160(我真的不会DP啊啊啊啊)

题意:有一大坨老鼠,每只老鼠都有体重和速度两个属性,为了证明越重的老鼠速度越慢,你需要找到一个最长的序列:体重递增,速度递减。思路:动态规划,注意要记录下老鼠的原始编号。AC代码: 参考kuangbinju哒哒哒~#include #include #include #include using namespace std;#define maxx 1005struct M

2015-07-17 21:01:55 483

原创 HDU 1176

题意:中文题,不多说了。思路:简单动态规划,类似于数塔,自底向上计算即可。AC代码:#include #include #include #include using namespace std;int n,t,x;int dp[100005][12],maxt;int main(){ while(scanf("%d",&n)!=EOF&&n) { mems

2015-07-17 18:47:02 687

原创 辗转相除法

long long gcd(long long a,long long b){ if(b==0) return a; return gcd(b,a%b);}

2015-07-17 17:14:34 305

原创 CodeForces 550B

题意:有n个问题,从中至少选出两个问题,其难度总和不小于l,不大于r,且最大难度与最小难度之差要大于x。参考了大神的代码,才写出来。思路:状态压缩,枚举AC代码:#include #include #include using namespace std;int main(){ int n,l,r,x,c[20],maxx,minn,s,ans,cnt; long

2015-07-17 16:45:08 451

原创 CodeForces 550C

真的对自己无语了,水题一直过不去,实在看不出自己的代码和别人的有什么区别,呜呜呜~不贴代码了,说下思路:要找到能够被8整除的数,需要后三位数被8整除。证明:任意自然数能够被分解为x*1000+y*100+z*10+a,1000可以被8整除,因此只要看后三位数能否被8整除即可。暴力枚举就行了。

2015-07-17 11:01:16 466

原创 CodeForces 548C

题意:给一个青蛙和一朵花浇水,它们会按每分钟(h*x+y)mod m的速度长高,问它们分别长到a1和a2,最少需要多长时间。思路:开始时理解错了题意,注意是同时给它们两个浇水啊!!!两个小家伙同时都在长高啊。找到循环节,暴力就可解。AC代码:#include #include using namespace std;int main(){ long long m,h1

2015-07-17 09:35:07 693

原创 CodeForces 548B

水题一道,却切得很吃力。题意:n*m的图上有许多小格,小格上是数字0或者1,问每对一个小格上的数字进行反转一次,在所有行中最大的连续的1的个数。#include #include #include using namespace std;struct A{ int maxx,sum;}a[505];int main(){ int n,m,q; i

2015-07-17 00:00:58 650

原创 POJ 2528 (线段树+离散化)

题意:在墙上贴海报,给出每次所贴的区间,问最后能看到几张海报。思路:线段树,但是所给区间长度最大为1000000,必须离散化处理。离散化:把所有点按序排列;去掉重复的点;给间隔大于一的两数之间添加一个数(避免错误);排序;查找出左右区间的位置(即离散化后所对应的数值)线段树:用模板即可解决(一个变量名写错,调试了一中午,呜呜~~温温好失败)AC代码:#include

2015-07-16 16:50:41 620

原创 HDU 1875

#include #include #include #include using namespace std;int n,t,m,k;int p[105];struct Edge{ int u; int v; double w;}edge[5010];struct Island{ double x; double y;}island[105];boo

2015-07-15 20:29:28 309

原创 HDU 1233

#include #include #include using namespace std;int p[105];int n,m;struct Edge{ int u; int v; int w;}edge[5005];bool cmp(Edge x,Edge y){ return x.w<y.w;}int find(int x){ retur

2015-07-15 20:28:02 362

原创 POJ 1258

#include #include #include using namespace std;#define maxx 105int k,p[maxx];int n;struct Edge{ int u,v,w;}edge[maxx*maxx/2];bool cmp(Edge a,Edge b){ return a.w<b.w;}int findpa(int x)

2015-07-15 20:24:52 301

原创 POJ 1751

#include#includeusing namespace std;const int M=5000000+10;const int N=10000+10;int f[N];int x[N],y[N];int n,cnt;struct p{ int u,v,w;}num[M];bool cmp(p x,p y){ return x.w<y.w;}

2015-07-15 20:22:37 388

原创 POJ 2349

#include #include #include #include using namespace std;#define maxx 505int s,n,k;int p[maxx];struct Edge{ int u,v; double w;}edge[maxx*maxx/2];struct Pos{ double x,y;}pos[maxx];bo

2015-07-15 20:21:07 320

原创 ZOJ 1586

#include #include #include using namespace std;int n,k;int a[1005];int p[1005];struct Edge{ int u,v,w;}edge[1000010];bool cmp(Edge a,Edge b){ return a.w<b.w;}int find(int x){ retur

2015-07-15 20:18:14 488

原创 POJ 2421

#include #include #include using namespace std;int n,q,k,p[105];struct Edge{ int u,v,w;}edge[100100];int find(int x){ return p[x]==x?x:p[x]=find(p[x]);}bool cmp(Edge a,Edge b){ return

2015-07-15 20:14:59 301

原创 POJ 2031

#include #include #include #include #include using namespace std;#define esp 10E-9int k,n;int p[105];struct Edge{ int u,v; double w;}edge[105*105];struct Cor{ double x,y,z,r;

2015-07-15 20:11:58 294

原创 POJ 1287

#include #include #include #include using namespace std;struct Edge{ int u,v,w;}edge[100000];int p[105];int m,k;long long n;bool cmp(Edge a,Edge b){ return a.w<b.w;}int find(int x){

2015-07-15 20:07:56 289

原创 POJ 1251

Jungle RoadsTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 20765 Accepted: 9560DescriptionThe Head Elder of the tropical island of Lagrishan ha

2015-07-15 20:02:24 333

原创 POJ 3026 (BFS+最小生成树)

题意好难理解~~大意:在一幅图里,‘S’代表起点,‘A’代表外星人,‘#’代表墙,‘  ’代表通路。你带着一群人从S出发,去找到所有的A,每到一个A处,你的队伍可以分为很多支,继续从该点开始遍历,要求找到所有的外星人,并且路径长度最短。最小生成树问题,A和S可以视为相同的。首先需要将图上的点之间的距离计算出来,BFS即可解决,然后在kruskal。累累累~AC代码:#include

2015-07-15 19:50:59 432

原创 POJ 1679

求最小生成树是否唯一,即求次小生成树,判断它的边权和是否和最小生成树的一样。还是用的kruskal算法,先求得最小生成树,再记录下路径,然后枚举删除最小生成树中的一条边,再构造新的生成树,看是否和最小权值相同。AC代码:#include #include #include using namespace std;#define maxx 105int n,p[maxx],m;

2015-07-15 15:23:28 257

原创 POJ 1789

最小生成树,题意比较难理解。建模:#include #include #include using namespace std;#define maxx 2005int n;int esum,p[maxx];struct Edge{ int u,v,w;}edge[maxx*maxx/2];bool cmp(Edge a,Edge b){ return a.w<b

2015-07-15 10:11:49 291

原创 最短路之Dijkstra算法

在所有的标记都清零的情况下,设d[x]表示源点到x点的最小值,设0为源点的话显然,d[0]=0;令其他点的d[x]=inf,为了找出最小值。循环n次{     在所有未标记过的节点中,找出d值最小的结点x;   给x标记;   更新从x出发的所有边;}模板:int Dijkstra(int s){ memset(v,0,sizeof(v));

2015-07-14 20:34:07 325

原创 POJ 3264

线段树,求区间上的最大值和最小值之差。水题,套模板即可。不会起变量名是硬伤,呜呜呜~~~AC代码:#include #include #include using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxx 50005int max0[maxx<<2],min

2015-07-13 23:26:25 304

六种排序算法

冒泡,选择,归并,堆,插入,快速排序六种算法。

2016-01-08

空空如也

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

TA关注的人

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