- 博客(46)
- 收藏
- 关注
原创 hdu 1166 敌兵布阵--线段树
/* 线段树题 这题很简单,但是老是Runtime Error(ACCESS_VIOLATION) 一直找不到,就看着一老兄的,改我的代码 一直把他的函数都搬过来了,还是那样 就又把输入部分抄了过来,这才对了 原来是处理'\n'的时候出的错 但是在我的
2011-08-17 10:14:34 476
原创 poj 1730 Perfect Pth Powers
/* 输入最大数是2的32次方,故所有输出<=32,故可以枚举 没想到pow(1.0*n,1.0/i)还能这样开n的i次方*/#include#includeint main(){ __int64 b,bb; int i,j; while(
2011-08-13 19:48:53 495
原创 poj 2016 Play on Words--欧拉通路
/* 有向欧拉通路问题,把单词首尾字母当做点,单词是他们之间的关系 1.此图连通 2.有且仅有两个点出度和入度不同,但差是1;其余点的出度和入度相等*/#include#include#includeint r[30],c[30],ji[30];
2011-08-13 19:43:24 631
原创 poj 1401 Factorial
/* 求n!末尾0的个数,0是有因子5*因子2得到的,2的个数大于5的个数,所以找n!中因子5的个数*/#include int main (){ int t,n,nn; scanf("%d",&t); while (t--) { scanf("
2011-08-13 19:34:29 374
原创 hdu 2923 Einbahnstrasse
/* 题目大意是:某个城市有n个路口,r条道路(有单向的和双向的),c辆车坏了,求一辆一辆地把坏车拖回来需要走多长的距离 因为是多源最短路(拖车公司和坏车的地点都作为源点)问题,用Floyd*/#include#include#include#incl
2011-08-13 09:50:42 645
原创 hdu 1217 Arbitrage--Floyd
/* 千万要注意输出“Yes”和“No”的时候是首字母大写还是全大写 注意变量初始化*/#include#includedouble map[35][35],hui;char s[35][150],nam[150],nam1[150];int n,
2011-08-12 11:33:21 365
原创 hdu 1385 Minimum Transport Cost--Floyd算法+点权值+记录路径
/* Floyd算法+点权值+记录路径*/#includeint map[110][110],tax[110],path[110][110];int n;#define imax 999999999void floyd(){ int i,j,k
2011-08-12 10:19:10 722
原创 poj 1511 Invitation Cards--SPFA
/* SPFA*/#include#includeusing namespace std;#define nMax 1000050#define eMax 10000050#define inf 1000000050__int64 sum,dist[nMax];int vis[nMax],p,q,tou[nMax],re_tou[nMax];struct node{ in
2011-08-11 12:58:47 480
原创 hdu 1173 采矿
#include#includedouble x[1000000],y[1000000];int cmp(const void *a,const void *b){ return *(double *)a>*(double *)b?1:-1;}int
2011-08-10 20:14:42 1041
原创 hdu 1174 爆头
#include#includedouble h1,h2,r1,r2,o1,o2,o3;double p1,p2,p3,q1,q2,q3,d1,d2,q,w,e,a,s,d,oppo,opp,dis;int main(){ int t; scanf("
2011-08-10 19:58:59 1292
原创 hdu 1176 免费馅饼
/* 很简单的一道题 很无语*/#include#includeint d[100050][11];#define max(a,b) (a)>(b)?(a):(b)void dp(int max){ int i,j; for(i=max
2011-08-10 19:37:46 337
原创 poj 1502 MPI Maelstrom--dijkstra--atoi
/* 先求各点到1的最短路 然后从个最短路中找到最大值 原型:int atoi(const char *nptr); 函数说明:参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回0, 否则开始做类型转换,之后检测到非数字(包括结
2011-08-10 09:15:37 452
原创 hdu 2112 HDU Today
#include#includeint map[160][160],vis[160],dist[160],st,en;char start[35],end[35],name[160][35];int num;int zhao(){ int xia=-1
2011-08-09 13:38:14 422
原创 hdu 1879 继续畅通工程
多实例测试,num没有初始化,Runtime Error(ACCESS_VIOLATION) N次#include#includestruct bian{ int x,y,w;}b[5010];int ji[110];int n,m,num=0,l;int cmp(const void *a,const void *b){ struct bian *c=(struct
2011-08-09 10:43:36 474
原创 poj 1258 Agri-Net--Prim和Kruskal算法
/* prim算法*/#include#includeint map[110][110],vis[110],dist[110];int n;void geng(int j)//更新剩余节点到树的最小距离{ int max=999999999,i; for(i=1;i<=n;i++) if(vis[i]&&map[i][j]<max) max=map[i][j]; d
2011-08-08 18:53:30 533
原创 hdu 1690 Bus System--floyd
#include__int64 map[110][110];__int64 station[110];#define Max 0x7fffffffffffff//设一最大值__int64 l1,l2,l3,l4,c1,c2,c3,c4,d;int n,m;__int64 deng(__int64 d)//计算费用{ if(d==0) return 0; else if(d
2011-08-08 17:04:17 438
原创 hdu 2544 最短路--Dijkstra
#include#includeint map[110][110];int vis[110],dist[110];int xun(int n)//在剩余的节点中寻找到1最近的{ int xia=-1,i; for(i=1;i<=n;i++) if(vis[i]==0&&(xia==-1||dist[i]<dist[xia])) xia=i; return xia;}v
2011-08-08 15:11:01 405
原创 poj 1088 滑雪--DP or 深搜?
#include#includeint map[110][110],step[110][110];int r,c;int dfs(int i,int j){ if(step[i][j]!=0) return step[i][j]; int max
2011-08-07 19:16:34 345
原创 hdu 1501 Zipper--LCS
#include#includechar a[210],b[210],c[420],d[210][210];//忘了c应该是400+int main(){ int t,n=1,i,j,len1,len2,len3; scanf("%d",&t); ge
2011-08-07 10:29:00 383
原创 poj 1269 Intersecting Lines
别人的代码,很简洁#includeint main(){ int n,m; double x1,x2,x3,x4,y1,y2,y3,y4,b,a,c,d,x0,y0; scanf("%d",&n); m=n; while(n--){ scan
2011-08-06 20:03:13 365
原创 poj 3299 Humidex
/* 没认真读题,以为就像例子那样输入T、D求H*/#include#includedouble t,d,h,z,e;int main(){ char c; while(scanf("%c",&c),c!='E') { t=-1111
2011-08-06 19:27:03 401
原创 poj 2965 The Pilots Brothers' refrigerator--棋盘--深搜
/* 深搜 简单,但是不熟练,犯了很多错误(七个)*/#includechar map[5][5];int i;int e=0;int step[20],st=0;int check(){ if(e==0) return 1;
2011-08-06 19:08:34 306
原创 hdu 1466 计算直线的交点数
/* DP 把i条直线分成那个两份:r条互相不平行的+(i-r)条平行直线(其中的每条和条互相不平行的相交都有r个交点) i条直线相交点数=r条直线相交点数+(i-r)*r;(1<=r<i)*/#include#includeint a[21][1
2011-08-06 10:45:53 599
原创 hdu 1243 反恐训练营--LCS
/* LCS*/#include#include#define max(a,b) (a)>(b)?(a):(b)int n;char s1[2010],s2[2010];int fen[2010],d[2010][2010];int main(
2011-08-06 09:49:54 893
原创 hdu 1080 Human Gene Functions--DP
#includechar s1[110],s2[110];int d[110][110];int p[5][5]={{0,-3,-4,-2,-1},{-3,5,-1,-2,-1},{-4,-1,5,-3,-2},{-2,-2,-3,5,-2},{-1,-1,-2,-2
2011-08-05 20:17:37 526
原创 hdu 1024 Max Sum Plus Plus--DP
/*问题: 给定由n个整数(可能为负整数)组成的序列dat1,dat2,…,datn,以及一个正整数m,要求确定序列的m个不相交子段,使这m个子段的总和达到最大。 分析: 设d(i,j)表示数组dat的前j项中i个子段和的最大值,且第i个子段含dat[j]。以下称
2011-08-05 16:30:54 711
原创 hdu 1165 Eddy's research II
/*Ackerman函数:当m=1时:A(1,n) = A(0,A(1,n-1)) = A(1,n-1)+1 = A(0,A(1,n-2))+1 = A(1,n-2)+2..... = A(1,n-n)+n
2011-08-05 10:11:13 703
原创 poj 1160 Post Office--DP--类背包问题
/*经典DP也可以说是背包问题:每个邮局占据一些村庄,求恰好占据完这些村庄时,距离的最小值(没有使用的那段代码可以这么理解)1、考虑在V个村庄中只建立【一个】邮局的情况,显然可以知道,将邮局建立在中间的那个村庄即可。也就是在a到b间建立一个邮局,若使消耗最小,则应该将邮局建立在(a+b)/2这个村庄上(可以通过画图知道)。2、下面考虑建立【多个】邮局的问题,可以这样将该问题拆分为若干子
2011-08-05 09:12:53 545
原创 hdu 1421 搬寝室--类背包问题
/* 可以说是背包问题吧:背包容量为k组,从n个中挑k组 因为要平方差最小的,故配组的时候一定是相邻的两个,共有n-1组,求出每组的平方差 所求就变成了从n-1个数中跳k个和最小的(好像挺简单,但是不能把同一个物品搬两次吧, 求相邻的两个数的平方差的时候,除了头尾,其余物品都算了两次) 所以用动态规划*/#include#includeusing namespace std;#
2011-08-04 17:07:00 607
原创 hdu 1074 Doing Homework--状态压缩
/* 状态压缩*/#include#include#includestruct ke{ char name[110]; int cost,end;}k[20];//存科目信息,cost是花费的时间,end是截止时间struct node
2011-08-04 15:45:13 528
原创 hdu 1065 I Think I Need a Houseboat
#includeint main(){ int n,i,z; double x,y,s; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%lf%lf",&x,&y); s=(x*x+y*y)*3.14
2011-08-04 09:42:38 692
原创 zoj 1949 Error Correction
/* 若每行每列的和都是偶数,输出OK; 若能修改一个符合要求,输出其坐标; 否则......*/#include#includeint map[110][110],r,c;int main(){ int n,i,j,ii,jj; while(scanf("
2011-08-03 17:33:53 483
原创 zoj 1858 Soundex
/* 一些字母被标号,还有一些没被标号,不用处理;找到单词的数字表示法 若连续的字母属于同一类,输出一个数字*/#includechar s[30];int ha(char *p){ if(*p=='A'||*p=='E'||*p=='I'||*p=='O'||*
2011-08-03 17:27:15 370
原创 poj 1566 Haiku Review
/* 就是找由/分割的三句话中syllables(不连续的a,e,i,o,u,y算一个)的数量 若符合给出的5:7:5,输出Y;否则输出第一个不符合的句子的号码*/#include#includechar s[250];int a[3],n;int ha(char
2011-08-03 17:22:24 505
原创 hdu 1315 Don't Get Rooked--深搜
/* 本题用深搜,尽可能多的安排rook*/#includechar map[4][4];int x[20],y[20],c[20],num,n,no;int xing(int i,int j){ if(c[j]==0) return 0; if(x[i]!
2011-08-03 17:14:13 622
原创 poj 1159 Palindrome--最长公共子串
/* 本题主要就是最长公共字串(同他自己的反串) 所求就是其长度-公共字串的长度 同时本题用到空间压缩,否则可能内存用超 我是用的两行的数组,轮流做当前行*/#include#includechar s[5050];int p[2][5050]
2011-08-03 17:12:20 346
原创 hdu 1203 I NEED A OFFER!--01背包
/* 01背包问题*/#includedouble dp[10010],g[1010];int m[1010],qian;double p(double w,int i){ return 1-(1-w)*(1-dp[i]);}void zopack(int c
2011-08-03 11:05:50 337
原创 hdu 1208 Pascal's Travels--DP
/* map[ i ][ j ]表示跳几格 f [ i ][ j ] 表示有几种条法 其实就是一个子状态继承问题,如果map[ i ][ j ]为k, 那么 f [ i+k ][ j ] 和f[i][j+k] 就可以增加 f [ i ][ j ]种跳跃方法了。*/#
2011-08-03 10:31:30 541
原创 hdu 1081 To The Max最大连续子串和
/* 一维的情况很简单,如何把一维的情况转化为二维情况呢? 例如,对于本题的测试数据: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 我们可以每次任选几行,压缩成一行,这样就转化为了一维情况。 例如,我们求1-2行中的最大子矩阵:即矩阵高为2(1-2行),宽为4的矩阵,可以先把1-2行相加,得到9 0 -13 2, 再求这个
2011-08-03 09:59:41 861
原创 hdu 1158 Employment Planning--DP
/* 用数组a[]来存每个月最少的雇用人数;max=11;表示a[]中的最大值;dp[i][j]表示第i个月,雇佣j个人时,这i个月的花销;这里要注意,dp[i][j]不是第i个月的花销,而是从第1个月到第i个月的总花销; DP 就是找阶段,3个月就分了3个阶段;第一
2011-08-03 09:08:54 487
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人