- 博客(40)
- 资源 (5)
- 收藏
- 关注
原创 DP hduHDU 5119
#includeusing namespace std;typedef long long ll;int a[41];ll dp[3][(1<<20)+100];int main(){ int t,kase=1;scanf("%d",&t); while(t--){ memset(dp,0,sizeof(dp)); int n,m;sca
2015-08-31 21:34:10 697
原创 dfs减枝回溯! HDU 5113
#includeusing namespace std;int n,m,k;int yy[60];int g[30][30];bool jud(int x,int y,int i){ if(x=n||y=m) return true; if(g[x][y]!=i) return true; return false;}bool Cut(int step){
2015-08-31 19:04:49 653
原创 CodeChef CHAPD
个人赛的题出不来还是没有想清楚!#includeusing namespace std;typedef long long ll;ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);}int main(){ int t; scanf("%d",&t); while(t--){ ll a,b;
2015-08-30 15:24:57 699
原创 {DP!}ZOJ 2604
这个题的题意给出了很多限制给出的n是开壶的个数并且都是成对出现的dp[i][j]i为n,j为小于等于kdp[i][1]遍都是一种,都是()()()()()()()()()这种形式其次会出现(((())))()()()() ()()()(()()()))()()这种形式总有一个最大深度的把第一个看成特殊的!!!把每一个分成了两种情况(X)Y推dp[i][j]
2015-08-29 11:56:54 1060
原创 强连通分量+poj2186
强连通分量:两个点可以互相连通。算法分解:第一步,正向dfs所有顶点,并后序遍历第二步,将边反向,从最大边dfs,构成强连通分量标号最大的节点属于DAG头部,cmp存一个强连通分量的拓扑序。poj2186解就是拓扑后的最后一个强连通分量#include#include#include#include#include#includeusing namespace
2015-08-25 01:03:40 667
原创 哈诺塔题型问题+uva10795+URAL 2029
哈诺塔基本算法:将A上的n-1个借助C移到B,再将第n个盘子移到C,最后将B上的n-1个盘子借助A移到C。得出的规律性结论:把n个盘子从A移到C的次数是2的n次方-1#includeusing namespace std;int cnt=0;int a=1,b=2,c=3;int f(int n,int a,int c,int b){ if(n==1) {
2015-08-24 19:55:03 1150
原创 最小生成树+Hdu4786
hdu4786 最小生成树的变形题,求一遍最小,求一遍最大,在从此区间是否含有斐波那契数,别忘了并查集,因为可能不连通。后来想其实不难,场上出不来的原还是对最小生成数不熟练,基础薄弱。!#includeusing namespace std;int par[100100];int rank_[101000];struct edge { int u,v,cost;};
2015-08-24 19:54:12 754
原创 数学专题
hdu2824欧拉函数模板#includeusing namespace std;const int N=3000010;int prime[N],isprime[N];int phi[N];void get_phi(){ int i,j,cnt=0; for(i=2;i<N;i++) { if(isprime[i]==0){
2015-08-16 23:15:01 608
原创 欧拉回路
七桥问题:一 七桥问题的结论:如果一个图是连通(无向图)的,且最多只有两个奇点(奇点数目为0或者2),则一定存在欧拉回路。如果有两个奇点,则必须从其中一个奇点出发,另一个奇点终止;如果奇点不存在,则可以在任意点出发,最终一定会回到该点。(路径不能重复)如果图是有向图,最多只能有两个点的入度不等于出度,而且必须是其中一个点的出度恰好比入度大1(作为起点),另一个点的入度比
2015-08-15 20:59:52 666
原创 hdu5024
思路要开阔些,或者说要转化一下思路,别太死把每个点当拐点,爆一边就可以,用记忆化搜索也行。都不会超时#includeusing namespace std;int n;#define o ans=max(ans,char C[105][105];int f(int i,int j,int a,int b){ int k=0; while(1){
2015-08-14 21:41:02 652
原创 线段树区间合并LCIShdu3308
#includeusing namespace std;#define N 100100int a[N];struct { int left,right,c; int ln,rn; int ls,rs,ms;}b[N*4];void pushup(int i){ b[i].ls=b[i*2].ls; b[i].rs=b[2*i+1].rs; b[
2015-08-14 11:40:35 632
原创 线段树区间更新hdu1698
第一种是sum存放每个点的值,然后区间更新,把需要更新的父亲的sum设为-1,代表此区间有被更新过,就不由挪动子节点了。vj上跑的时间这个快一点。另一种lazy标志位,区间更新时,把lazy标志位设为1,当查找的区间含lazy过的,就变更子节点位原来的值,所以需要一个tag记录原来的值。#includeusing namespace std;#define N 100100st
2015-08-14 10:13:55 602
原创 线段树hdu1166
线段树节点的左儿子[a,(a+b)/2]右儿子[(a+b)/2,b]这个很重要把线段树当成完全二叉树算,开到3*N就可以,但最好是4*N#includeusing namespace std;int a[50005];struct { int sum; int left,right;}b[50005*4];void build(int left,int rig
2015-08-13 20:49:49 565
原创 hdu5240
想了辣么多 貌似就一个条件#includeusing namespace std;int flag=0;int main(){int t,n,kase=1;scanf("%d",&t);while(t--){flag=0;scanf("%d",&n);for(int i=0;i<n;i++){int r,e,l;scanf("%d%d%d",&r,&e,&l);if(e < r) flag
2015-08-13 19:21:32 755
原创 hdu5238
0: 11: 12: 33: 34: 55: 56: 77: 78: 99: 910: 1111: 11|0: 01: 12: 03: 14: 05: 16: 07: 18: 09: 110: 011: 112: 013: 114: 015: 116: 017: 118: 0
2015-08-13 18:55:00 677
原创 java大数 hdu5241
import java.io.*;import java.math.*;import java.util.*;public class Main{ public static void main(String[] args){ int t; Scanner in = new Scanner(System.in); t=in.nextI
2015-08-13 18:17:04 739
原创 hdu4763
字符串匹配 #includeusing namespace std;char s[1000100];int main(){ int n; scanf("%d",&n); getchar(); while(n--){ gets(s); int flag=0,p=0; int len=strlen(s),i=0
2015-08-11 10:22:20 863
原创 第11章 图论模型与算法
再谈树无根树转有根数#includeusing namespace std;const int maxn = 100;vector G[maxn];int n;void read_tree(){ int u,v; scanf("%d",&n); for(int i=0;i<n-1;i++){ scanf("%d%d",&u,&v);
2015-08-09 18:11:35 548
原创 控制器的基本组成
完成一条指令:取指令PC:PC存放当前欲执行指令地址,计数功能PC+1IR:分析指令,存放当前欲执行指令 CU控制单元运算器 控制器 存储器构成主机取数操作:取指令:计算机的发展应用系统总线:第四章存储器
2015-08-09 17:25:57 2604
原创 第八章 高效算法设计
分治法求最大连续和注意范围是[x,y)#includeusing namespace std;int maxsum(int *A,int x,int y){ if(y-x==1) return A[x]; int m=x+(y-x)/2; int maxs = max(maxsum(A,x,m),maxsum(A,m,y)); int v,L,R;
2015-08-08 22:26:27 545
原创 记忆化dp hdu1978
就是那一个数组保存已经到过的点每一个数组存储的都是这个点到nm的路线数#includeusing namespace std;int n,m;int dp[100][100];int a[100][100];int p=0;int dfs(int x,int y){p++; if(dp[x][y]>0) return dp[x][y]; dp[x][y]
2015-08-08 21:19:51 596
原创 2011 ACM/ICPC 福州赛区现场赛8.7
A题是哪个象棋的题:B题hdu4122:好像是水过去的,看到题解要用队列,就是简单的枚举加判断条件过去的。C题hdu4123:用到MRQ算法查询区间内的最大最小值G题hdu4127是个填颜色的题:是把所有点分成3部分,已经和00连通的,还有就是下一次需要填的颜色部分,剩下的部分就是填不了的,用IDA算法,分开写几个小程序,填充颜色同一个颜色的程序,当前状况需要改变最
2015-08-07 21:09:23 743
原创 hdu4124
对着题解敲了一遍,彻底敲晕了,还敲的不对#includeusing namespace std;#define N 50004#define M 100004int n,m,d[N];int p[N],eid;struct Edge{ int u,v,cost,nxt,mlen;}e[M];void init(int n){ for(int i=1;i<=n;i
2015-08-07 20:19:10 557
原创 找规律hdu4577
import java.util.*;import java.io.*;import java.math.BigInteger;public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int T=sc.nextInt(); for(int
2015-08-06 22:57:26 720
原创 最大二分匹配hdu5093
两个集合分别是按行和列凑成的点的集合如图10000000220300041000000012030003两个集合构成的边,求该图的最大二分匹配#includeusing namespace std;bool edge[3000][3000];char mapp[100][100];in
2015-08-06 20:48:09 586
原创 最大二分匹配
这个相当于把两两的关系搞成图求的是所有边的子集,使得这个子集没有两两无公共点这个代码不好理解#includeusing namespace std;#define MAX_V 100int V;vector G[MAX_V];int match[MAX_V];bool used[MAX_V];void add_edge(int u,int v){ G[u].pu
2015-08-06 20:22:42 563
原创 最大二分图hdu5091
今天的B题我是想爆出来的,当时想的不错,但后来发现这样爆行不通前面的*点就不是最优了但是我环视要存起来#includeusing namespace std;int n,m;char S[60][60];int IDd[60][60];int IDd2[60][60];void dfs(int r,int c,int id){// printf("r%d c%
2015-08-06 20:20:55 754
原创 Prim
最小生成树模板学习的速度太慢了,浪费了不少的时间,必须抓紧了#includeusing namespace std;#define MAX_V 100#define INF 0x3f3f3f3fint cost[MAX_V][MAX_V];int mincost[MAX_V];bool used[MAX_V];int V;int prim(){ for(int i=
2015-08-06 19:41:03 620
原创 2013 ACM/ICPC 杭州邀请赛(8.5)
A。dp但是m次数太多,开不出那么大的数组,所以要用算完的值替代新的值,这样来回循环,滚动数组,我用的方法比较麻烦,看到有%2的,也有^1的我写的是每一次从0到n循环一边,能到的话概率相加还有一种思路是当前的概率至与上一次的概率有关,每一次都是dp[i][j] = dp[i-1][ (j-x+n)%n ] + dp[i][ (j+x)%n ]I题就是硬暴,开始想用dfs,发现不对
2015-08-05 20:53:17 525
原创 hdu5003
看仔细题意#includeusing namespace std;bool cmp(int a,int b){ return a>b;}int main(){ int cases; scanf("%d",&cases); while(cases--){ int n,a[500 + 5]; scanf("%d",&n
2015-08-04 08:51:57 619
原创 hdu5131
#includeusing namespace std;struct hero{ string second; int first; bool operator < ( const hero &x) const { if(first == x.first) { return second < x.second; } return fir
2015-08-03 10:05:11 565
原创 hdu5127
非常卡时间,不能用set而却糖果是不会重的,之前认为会重也一直超时别忘了清空,不清空也会超时#includeusing namespace std;typedef pair candy;list s;int main(){ int n; while( scanf("%d",&n) && n ){ s.clear(); wh
2015-08-03 09:26:47 1173
原创 树状数组
#includeint A[15]={0,1,2,3,4,5,6,7,8,9,10};int C[15];int lowbit(int x){ return x&(-x);}int SUM(int n){ int sum=0; while(n>0){ sum = sum + C[n]; n = n - lowbit(n);
2015-08-01 19:28:08 427
原创 八数码问题(暴力)
紫书上的程序真是牛逼用到了路径寻找之类,还有状态数组,bfs,按坐标寻路的数组,hash,编码解码,STL等#include#include#include#includeusing namespace std;#define maxstate 1000000typedef int State[9];State st[maxstate] , goal;int dist[ma
2015-08-01 10:24:35 1516
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人