自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 poj 1273 最大流 EK算法

最大流问题:从源点到终点运送货物,经过一些中转站,中转站之间有路径连接,每条路径有运送货物量的上限,求最多能运送多少货物 找最大流就是每次找增广路径,并更新网络,直到找不到增广路径#includeusing namespace std;const int MAX = 201;const int inf = 0x3f3f3f3f;#define min(a,b) (a)<(b)?

2011-12-04 11:00:44 319

原创 acm 点点滴滴

qsort排序方法六种qsort排序方法一、对int类型数组排序int num[100];Sample:int cmp ( const void *a , const void *b ){        return *(int *)a - *(int *)b;}qsort(num,100,sizeof(num[0]),cmp);

2011-12-03 19:08:51 273

原创 poj 3169 差分约束 + spfa

#include#includeusing namespace std;#define inf 0x1fffffffint dist[10010],visited[10010],adj[10010],size,cnt[10010];int nodenum,edgenum

2011-09-14 15:00:31 271

原创 poj 1201 Intervals 差分约束 + spfa

题意;给出一些闭区间[a,b],在区间中取c个数,求在所有的区间中,所取得数的最小个数思路:差分约束 + spfa 求最大路径#include#includeusing namespace std;#define inf 0x1fffffffint visited

2011-09-14 13:38:44 267

原创 poj 1511 Invitation Cards

题意;求从源点到其余各点以及其他点到源点的距离之和思路:分别正向建图 和反向建图  各求一次最短路径dijkstra#include //dijkstra#includeusing namespace std;int nodenum,edgenum;int s

2011-09-14 11:50:20 260

原创 poj 3159 Candies 差分约束 + spfa

用spfa#include//spfa#include //用队列超时 用栈600ms+using namespace std;#define inf 0x1fffffffint dist[30010],visited[30010],adj[30010],size;

2011-09-14 11:45:06 255

原创 poj 3051 Satellite Photographs 基础DFS

#includeusing namespace std;char map[1005][83],visited[1005][83];int w,h,ans;int dirx[4] = {1,-1,0,0};int diry[4] = {0,0,1,-1};bool ju

2011-09-09 13:57:10 239

原创 poj 2351 Network Saboteur DFS

#include//一开始从两个集合出发考虑,第一个有哪些点,第二个有哪些点,没想出来//然后考虑每个点,可以在第一个集合或者第二个集合using namespace std;int length[23][23],ans[23],n,sum = 0;void dfs(in

2011-09-07 15:17:00 320

转载 一位ACMer过来人的心得(转载)

刻苦的训练我打算最后稍微提一下。主要说后者:什么是有效地训练?       我想说下我的理解。       很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。       我觉得一般情况下,对于我们普通学校

2011-08-28 10:10:39 251

原创 poj 2192 Zipper DP

dp[i][j]表示s1[]的前i个字符与s2[]的前j个字符能否成功组合,值分别为0,1如果dp[i-1][j] == 1并且s1[i-1] == s3[i-1+j](s1,s2,s3都是从0开始的,所以取其中某个字符时要减1),则dp[i][j] = 1 ; 如果dp

2011-08-27 18:28:14 254

原创 poj 1953 World Cup Noise DP

对于每一个数,它是前一个数在末尾加1或0得到的;状态为dp[][2],dp[i][0]表示长度为i,结尾为0的数的个数,dp[i][1]表示长度为i,结尾为1的数的个数;dp[i][0] = dp[i-1][0] + dp[i-1][1];dp[i][1] = dp[

2011-08-27 15:03:57 239

原创 poj 1157 LITTLE SHOP OF FLOWERS DP 背包问题变形

dp[i][j] 表示前i个花瓶装j朵花,类似于体积刚好为V的01背包问题在本题中花瓶可以选择使用或者不使用,类似于背包问题中的物品,背包问题中的体积即为本题的花瓶数总体积为v,有f个物品,每一个体积为1,价值为value[f][v]由于是刚好装满背包,所以初始化dp

2011-08-27 11:25:34 248

原创 poj 2479 两段连续子序列的最大和

对每一个点,求它的左边的最大连续子序列和以及右边的最大连续子序列和,取最大值由于两段区间不连续,对点i,所以max = left[i] + right[i+1];#includeusing namespace std;int main(){ int t,l[500

2011-08-26 16:27:21 580

原创 poj 1903 LIS的Nlogn解法

用一个栈储存上升子序列,对每一个输入的数a,与num[top]相比,若a > num[top]入栈,否则在栈中找到第一个比a大的数,用a替换查找时由于是有序,用二分查找#includeusing namespace std;int binarySearch(int l

2011-08-26 15:18:14 453

原创 poj 1836 最大上升子序列 (LIS)

分别按顺序和逆序做两遍LIS,然后枚举中点#includeusing namespace std;int main(){ int n,l[1003],r[1003]; double num[1003]; int i,j,max; scanf("%d",&n);

2011-08-26 15:13:05 258

原创 poj 1050 To the Max 最大子矩阵和

把二维矩阵转化为一维,然后求最大连续子序列和#includeusing namespace std;int MaxSum(int n,int a[]){ int sum = 0,i,max = INT_MIN; for(i = 1;i <= n;i++) {

2011-08-26 15:10:21 280

原创 poj 1191 棋盘分割 DP

dp[k][x1][y1][x2][y2]表示(x1,y1)和(x2,y2)所围成的区域切割k次所得的方块各个平方的和切割可以横向或纵向,切割一次之后可以在所得的两块中选择一块继续切割,另一块保持不动s[x1][y1][x2][y2]表示(x1,y1)和(x2,y2)围成

2011-08-25 16:35:15 260

原创 poj 1390 Blocks 方块消除

把方块按颜色分段,color[i]表示这段方块的颜色,len[i]表示这段方块的长度dp[i][j][k]表示从i段到j段,第j段之后有k个方块与第j段颜色相同对第j段,有两种处理方法直接消除或者与前面的某一段一起消除dp[i][j][k] = max(dp[i]

2011-08-25 11:24:40 371

原创 hdu 1231 最大连续子序列和

和hdu 1003一样#includeusing namespace std;int main(){ int n; int num[10003]; while(scanf("%d",&n) != EOF&&n) { int i,j,sum = 0,begin,e

2011-08-24 08:38:24 275

原创 动态规划原理

子问题与原问题具有完全相同的结构是否可以用结束状态确定 状态? 不一定具有无后效性?在每个子问题的求解中都利用了它前面的子问题的最优化结果,依次进行,最后一个子问题所得到的最优解就是整个问题的最优解最优化原理:局部最优解导致全局最优解无后效性 (D

2011-08-23 15:10:57 550

原创 poj 1014 Dividing 多重背包

题意:价值为1~6的弹珠各有若干个,问能否按价值均分思路:多重背包,V为总价值的一半,若dp[V] == V,则能均分#includeusing namespace std;#define max(a,b) ((a)>(b)?(a):(b))void ZeroOne

2011-08-21 16:27:52 221

原创 hdu 2191 多重背包

#includeusing namespace std;int N,V,dp[105];int max(int a,int b){ return a > b ? a : b;}void ZeroOnePack(int weight,int value){ for

2011-08-21 15:26:40 202

原创 hdu 2602 DP 01背包

就是最简单的01背包问题一维空间#includeusing namespace std;int main(){ int t; scanf("%d",&t); while(t--) { int N,V,w[1005],v[1005],dp[1005];

2011-08-17 18:07:22 184

原创 poj 3624 Charm Bracelet DP 01背包

写成二维数组,空间太大,RE#includeusing namespace std;int max(int a,int b){ return a>b?a:b;}int main(){ int n,m,i,j,w[3500],d[3500],dp[13000];

2011-08-17 17:47:32 177

原创 poj 2181 Jumping Cows DP

题意:一群牛的初始跳跃高度为0,一些药能提高它们的跳跃能力,奇数次服用药是提高跳跃能力,偶数次降低,求最高高度思路:见注释#includeusing namespace std;const int MAX = 150005;int dp[MAX][2],nu

2011-08-17 14:29:55 269

原创 hdu 1003 DP

最大子序列之和状态转移方程:sum[i] = sum[i-1]>0?sum[i-1]+num[i]:num[i]比较max 和sum[i],判断是否更新sta ,end#includeusing namespace std;int main(){ int t,

2011-08-17 11:37:17 181

原创 poj 1141 Brackets Sequence DP

DP基础题#includeusing namespace std;char str[110];int dp[110][110],path[110][110];void output(int i,int j){ if(i > j) return ; if(i ==

2011-08-16 15:13:35 173

原创 poj 1651 Multiplication Puzzle DP

题意:一串数字,除了第一个和最后一个,每次从中取出一个数并计算它和前后两个数的乘积,把这些乘积累加,求最小值分析:每一次的乘积只和取出的数,第一和最后一个数这三个因素有关,设最后取出的数在位置j,那么从第一个数到j和从j到最后一个数是两个互不影响的区间,乘积和最小值为左右

2011-08-15 19:59:28 194

原创 poj 1163 The Triangle 基础DP

题意:一个数字三角形,第i行有i个数,从每个数可以移动到左下方或又下方,求从顶层到底层的所有路径中,最大的数字和思路:状态:d[i,j]表示点(i,j)到底层的数字和,转移方程:d[i,j] = max(d[i+1,j],d[i+1,j+1]) + num[i][j](num

2011-08-14 12:50:07 205

原创 poj 2182 Lost Cows

题意:有一组数,从第二个数开始,给出它前面有多少个数比它小,求这组数的顺序思路:对题中数据,从后往前看,最后一个数是0,所以它是1,2,3,4,5中最小的数1,倒数第二个数是1,所以它是2,3,4,5中第二小的是3,依此类推#includeusing namespace

2011-08-13 13:16:48 156

原创 poj 3264 Balanced Lineup

RMQ(区间最值问题)题意:先给出一组数,然后给出区间,求区间内最大值与最小值的差思路:RMQ的ST#include#includeusing namespace std;#define max(a,b) ((a)>(b)?(a):(b))#define mi

2011-08-12 18:35:19 188

原创 poj 3630 Phone List

题意:一些电话号码,问其中是否有某些号码是其他号码的前缀思路:Trie树,若某个字母出现过不止一次且它是某个电话号码的最后一个字母,则输出 NO由于题目数据较大,若每次插入的时候都用new 会超时,所以先定义一个数组,然后每次直接取地址,不需要用new来获得#incl

2011-08-12 17:34:37 162

原创 poj 2001 Shortest Prefixes Trie树

一道Trie树基础题 题目给出一组字符串 求每个字符的最小前缀 使得这个字符串能区别于其他的字符串思路:建立一棵Trie树,一次查找字符串中的字母,若某个字母只出现过一次,则输出以该字母结尾的子串#includeusing namespace std;char s

2011-08-12 17:24:06 191

原创 poj 2309

类似于树状数组的原理#includeusing namespace std;int lowbit(int x){ return x&(-x);}int main(){ int t; scanf("%d",&t); while(t--) { int n

2011-08-12 09:45:55 185

原创 poj 2481 Cows

与2352很类似的一道题,不同之处在于,2352是要求点在当前位置的左下方,2481要求在左上方,所以用10010-y的值作为新坐标,则变为了左下方,第二个不同在于2352中没有相同的点,而本题则会出现相同的点,对于相同的点,由于排好序之后是相邻的,所以 i与i-1是相同的点,那

2011-08-12 09:43:33 180

原创 hdu 1166 树状数组 线段树

一道线段树和树状数组的基础题用树状数组做:#includeusing namespace std;#define N 50010int size,c[N];int lowbit(int x){ return x&(-x);}void modify(int

2011-08-08 09:44:33 191

转载 什么是离散化

如果说今年这时候OIBH问得最多的问题是二分图,那么去年这时候问得最多的算是离散化了。对于“什么是离散化”,搜索帖子你会发现有各种说法,比如“排序后处理”、“对坐标的近似处理”等等。哪个是对的呢?哪个都对。关键在于,这需要一些例子和不少的讲解才能完全解释清楚。    离散化是

2011-08-07 18:47:18 312

原创 poj 1195 mobile phones

二维树状数组sum(x,y)表示从0~x,0~y范围区间内的和包括0,0,x,y#includeusing namespace std;int c[1050][1050],size;int lowbit(int x);void modify(int x,int y

2011-08-04 19:30:03 217

原创 poj 2352 Stars

一道树状数组的基础题由于星星是按纵坐标升序 横坐标升序排列的,所以后面的点不会在前面的点的下面,也不会在前面的点的左边所以某一点i 的level就是它前面的星星的数量和,即从0到i 的和,由于0会导致无限循环,所以每个点加1计算从1到i+1#includeusi

2011-08-04 16:15:07 177

原创 poj 1617

#include using namespace std;#includeint getmin(char s[]);int main(){ char s[11]; while(cin>>s) { if(strcmp(s,"THEEND") == 0) b

2011-08-03 19:27:11 794

空空如也

空空如也

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

TA关注的人

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