- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 POJ 1321 棋盘问题
#include#includeint check(int a,int m){ int b=0; while(a>0) { if(a&1) b++; a>>=1; } if(b==m) return 1; return 0;}int main(){ int n
2015-01-30 19:28:25 581
原创 hdu 3001 Travelling
/*题意:说一个人想游玩n个城市,每个城市最多走两次,问最短的距离*/#include#include#define MMax 2000000000#define Min(a,b) a>b?b:aint dp[59050][15],cs[59050][15],dis[15][15];//dp[i][j]定义的状态是在i状态时到达j的最短的,cs[i][j]表示在i状态下的经过j的
2015-01-30 11:05:23 755
原创 TSP+dp+状态压缩的本质
/*dis[1][2]=1;dis[1][3]=3;dis[1][4]=6;dis[2][3]=2;dis[2][4]=5;dis[3][4]=3;二进制从右往左依次代表的1-n,0代表没有经过1代表经过了,比如3化成二进制为11代表经过了1和2.dp[i][j]代表的状态为在状态i的时候从1出发最后到达j的值只经过一个点dp[1][1]=0//初始化,其他的都为无穷大
2015-01-29 17:11:36 675
原创 宏定义放在结构体里
#includestruct node{ #define Max(a,b) a>b?a:b//个人感觉宏定义放在结构体里和放在放在最上面是没有区别的,可能是为了读代码方便 int x,y;};struct node2{ int x,y;};int main(){ node a; node b; scanf(
2015-01-27 09:43:42 2619
原创 HDU 3681 Prison Break
/*给一个n*m的图,F代表起点,G代表充电池,一个充电池只能用一次,但可以用多个充电池,只能把电池充到最大(原始的电量),可以走过不用,D不能走,问的是把所有的Y走一遍的原始的电量是多少dp+状态压缩+二分+bfsdp[i][j]表示的状态是在i状态到达j的最大的电量*/#include#include#include#define Max(a,b) a>b?a:b#
2015-01-26 14:51:08 557
原创 HDU 4539 郑厂长系列故事――排兵布阵
/*曼哈顿距离的定义是:两个点的坐标为(x1,y1),(x2,y2),两点的曼哈顿距离为|x1-x2|+|y1-y2|题意:题上要求是两个士兵的距离不能是曼哈顿距离为2,意思就是这个点在同一行同一列不能相间,这个点的左上,左下,右上,右下角不能有士兵.思路:dp+状态压缩dp[i][j][k]定义的状态为i是当前行,j为当前行的状态,k为上一行的状态类似炮兵阵地*/#inclu
2015-01-24 09:45:57 2417
原创 曼哈顿距离
给定两个点坐标为(x1,y1),(x2,y2),|x1-x2|+|y1-y2|为两点的曼哈顿距离,Max(|x1-x2|+|y1-y2|)是切比雪夫距离对于原坐标系中两点间的 Chebyshev 距离,是将坐标轴顺时针旋转45度并将所有点的坐标值放大sqrt(2)倍所得到的新坐标系中的Manhattan距离的二分之一。
2015-01-24 08:28:55 2474 1
原创 hdu 2888 Check Corners
/*题意:给出m,n代表给出长为m宽为n的矩阵,然后给出一个q代表查询的次数,然后q行每行给出一个 r1, c1, r2, c2 且满足(1 <= r1 <= r2 <= m, 1 <= c1 <= c2 <= n)输出这个矩形范围内的最大值,如果最大值是四个顶点某一个的话就输出yes否则输出no*/#include#include#define Max(a,b) a>b?a:bin
2015-01-23 18:25:00 582
转载 poj 3311
//Floyd + 状态压缩DP//题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最短//也就是TSP(旅行商)问题,首先不难想到用FLOYD先求出任意2点的距离dis[i][j]//接着枚举所有状态,用11位二进制表示10个城市和pizza店,1表示经过,0表示没有经过//定义状态DP(S,i)表示在S状态下,从0开始到达城市I的最
2015-01-23 14:42:44 436
原创 HDU 1565 方格取数(1)
/*dp+状态压缩和炮兵阵地类似*/#include#include#define Max(a,b) a>b?a:bint dp[25][20000],s[20000],len,Map[25][25],n;int check(int m){ if(m&(m<<1)) return 0; return 1;}void Inint(){
2015-01-22 08:28:24 745
原创 大白书伸展树学习笔记
void splay(Node * &o,int k){ int d=o->cmp(k);//cmp函数比较的是k和o->ch[0]->s+1的大小 if(d==1) k-=o->ch[0]->s+1; if(d!=-1) { Node *p=o->ch[d]; int d2=p->cmp(k); i
2015-01-20 09:27:24 974
原创 指向指针的引用
#includeusing namespace std;int main(){ int a=1; int *p=&a; int * & t=p;//引用简单点说就是一个变量的别名,它的本质是一个指针,t和p都是指向同一个变量,当t的内容变了的时候,p也跟着变 cout return 0;}
2015-01-17 11:36:55 656
原创 后缀数组之最长公共前缀
#include#define maxn 100int main(){ int rank[maxn],height[maxn],sa[maxn]= {0,3,1,4,2},s[maxn]= {1,2,3,2,3};//s串可以看成abcbc int i,j,k=0; for(i=0; i rank[sa[i]]=i; for(i
2015-01-15 20:53:31 1058
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人