自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fengyu0556的专栏

路漫漫其修远兮,吾将上下而求索!----努力从现在开始!

  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 POJ_1611_The Suspects

<br />//我写的没有用典型的并查集做,利用bfs选择出受感染的小组,然后再统计这些小组里共有多少人#include<stdio.h>#include<string.h>#include<queue>using namespace std;int num[500][30005];int ans,n,m;int main(){ while(scanf("%d%d",&n,&m)==2&&(m+n)) { if(!m) printf("1/n");

2010-07-31 15:14:00 464

原创 POJ_2386_Lake Counting

<br />//简单的一道题,使用dfs和bfs都可以,当然使用bfs效率比较高,这里使用bfs实现 //与1562差别不大#include<stdio.h>#include<queue>#include<string.h>using namespace std;char map[105][105];bool vis[105][105];//保存访问过的节点 //八个方向 int di[8][2]={-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-

2010-07-31 01:19:00 556

原创 POJ_1014_Dividing

<br />///动态规划,又有点筛选法的思想,按价值划分状态,要求能否划分出一半的价值也就是求//value[halfvalue]的状态。 #include<stdio.h>#include<string.h>//保存每一种价值的石头 int num[7];//value[i]用来指示是否能划分出i的石头出来,1则能划分出来,反之为0。 bool value[100005];int main(){ freopen("divide.in","r",stdin);

2010-07-30 23:37:00 479

原创 POJ_1117_Pairs of Integers

<br />///如果当做数学题来做的话肯定要超时,因为10^9数量级太大///这题我用的构造法,设要求的数中较大的一个为m,则m的位数最多与和相等。设要去掉的是第//k位数字(从左到右依次为0,1……),通过k位将m分成两部分,右边部分肯定和加数的右边相等//且要满足两对应位数字之和的末位与n的对应位相同,例如10=10+0;k位左边部分应与加数错开//一位;枚举k同时搜索k右边的部分,得到右边部分,左边部分可以根据和推算出来//注意搜索右边部分时,注意每一位有可能有两种情况,假设和的

2010-07-25 21:17:00 1939

原创 POJ_2353_Ministry

//经典的DP,双向DP,状态转移方程为1。num[i][j]=min{num[i][j-1],num[i+1][j]}+fee[i][j];//2。num[i][j]={num[i][j],num[i][j+1]+fee[i][j]};以上为先比较左侧与下侧,然后再和右侧//比较来确定最终的num[i][j]的值。同时用di[i][j]确定回溯的方向。 #include#include#includeint fee[105][505],num[105][505],di[105][5

2010-07-22 20:04:00 1152 1

原创 POJ_2084_Game of Connections

//递推,大数乘法和加法 #include#includeint ans[105][200];int add(int s1[],int s2[]){ int i,j; int temp[200]; temp[0]=0; int max,k; int len1,len2; for(len1=0;;len1++) if(s1[len1]==-1) break; for(len2=0;;len2++) if(s2[len2]==-1) break;

2010-07-20 16:41:00 1197

原创 POJ_1980_Unit Fraction Partition

<br />//经过木棍,蛋糕等等剪枝要求较高的题目之后,这道题倒也不是很难了,还是要注意一下细节//细节决定成败啊 #include<stdio.h>#include<string.h>int num[10];int p,q,m,n;int ans;//求最小公倍数 int lcm(int x,int y){ int t,a=x,b=y; if(x<y) { t=x;x=y;y=t; } while(x%

2010-07-20 03:06:00 2791 4

原创 POJ_1979_Red and Black

<br />//简单的广度优先搜索#include<stdio.h>#include<string.h>#include<queue>using namespace std;queue<int> q;char map[25][25],f[25][25];int di[4][2]={-1,0,1,0,0,-1,0,1};int w,h;int isin(int m,int n){ if(m>0&&m<=h&&n>0&&n<=w) return 1; retu

2010-07-19 17:29:00 558

原创 POJ_1118_Lining Up

<br />///暴力解法,枚举每两个点,然后求出在这两个点所确定的直线上的点的总个数,具体方法///主要是利用斜率来比较大小,相等则在同一条直线上,反之在直线外。 ///应该考虑斜率不存在的情况,题目数据有点弱,所以我也没考虑,其实只要在求斜率时判断//一下就行了 //与2606完全一样 #include<stdio.h>#include<algorithm>using namespace std;double pot[705][2];double k[700];i

2010-07-19 11:06:00 530

原创 POJ_1190_生日蛋糕

<br />///经典搜索,还可以继续剪枝优化#include<stdio.h>#include<math.h>//S表示最小面积int N,S,M;//end初始为0,有解则变为1.min用来表示每次成功搜索时蛋糕的外表面积int end,min;//v表示当前剩余的体积,m表示剩余蛋糕的层数,lastr表示已经确定的上一层蛋糕的半径,lasth同理int dfs(int v,int m,int lastr,int lasth){ if(m==0) { /

2010-07-18 18:08:00 1866

原创 POJ_2362_Square

<br />//1011的简化版,TLE了一次,主要是把变量写错了 #include<stdio.h>#include<string.h>//#include<time.h>#include<algorithm>using namespace std;int stick[25],n,sum,end;bool f[25];int cmp(const void* _a,const void* _b){ int* a=(int *)_a; int* b=(int *)_

2010-07-17 16:43:00 475

原创 POJ_1002_487-3279

<br />//排序//可以用到<ctype.h>中的一些函数//isalnum() 功能:判断字符变量c是否为字母或数字 //说明:当c为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。 //isalpha() 判断字符ch是否为英文字母 //isdigit() 判断字符c是否为数字 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#include<algorit

2010-07-16 20:37:00 422

原创 POJ_1655_Balancing Act

//树形DP,TREE DP。这里使用邻接表存储树,可以改进的一点就是使用动态分配数组。 #include#include#includeint f[20001];int n;//树的节点的表示 typedef struct node{ int num; struct node *next; };//建立头结点数组 node ft[20001];//深度优先搜索,last用于指示上一层节点编号,主要是防止死循环 int dfs(int last,i

2010-07-15 11:24:00 710

原创 POJ_1654_Area

<br />//计算几何,求多边形的面积 ///这题精度要求比较大,将多边形拆成一个个三角形,利用向量法求三角形的面积,可以先求//平行四边形的面积,最后统一除以二得多边形面积。注意按坐标法,面积有可能为负,因为坐标//法对顺时针和逆时针结果不同,所以最后需要取正。坐标法对处理凹多边形的面积同样奏效。 #include<stdio.h>#include<string.h>#include<math.h>//使用64位的整型_int64,也可以用longlong来表示,输出时用I6

2010-07-13 14:27:00 487

原创 POJ_1647_One-move checkmate

<br />//真是麻烦的一道题,从左到右,从上到下依次枚举每一个点,先判断后是否能够到达这个点//(注意不能够越点,也就是要考虑后起点和终点之间不能存在其它点),若能够到达则继续判断//是否能够将死的情况。由于只有一个王的情况下,王可以选择不动,所以白方移动后必须要形成//对黑王攻击的局面。 #include<stdio.h>#include<string.h>#include<stdlib.h>int loc[3][2];char tem[3][4];int di[8

2010-07-13 12:02:00 1092 1

原创 POJ_1011_Sticks

<br />////搜索剪枝,一个好的剪枝真的是太关键了,对剪枝有了进一步了解///先深度搜索出一只原始木棍,将用到的小木棍标识为已经使用,在这个基础上再深度搜索下///一只原始木棍,分层深度搜索(自己想的名字),最后根据是否得到了目标数目的原始木棍来判断///程序是否结束。 #include<stdio.h>#include<string.h>#include<algorithm>#include<time.h>using namespace std;int f[70]

2010-07-12 19:00:00 392

原创 POJ_1723_SOLDIERS

<br />//水平与垂直互不影响,这是关键。 //对于中位数使y方向目标最小,可以这么理解,例如y1,y2(有序),要使|y-y1|+|y-y2|最小,y必须y2>=y>=y1//同理y3,y1,y2,y4,|y-y3|+|y-y4|最小,y3<=y<=y4,而要|y-y1|+|y-y2|+|y-y3|+|y-y4|最小,必须使y取到两个//区间重叠的部分,以上是y值为偶数的情况,对于为奇数的情况,可以将中间值看为一个区间。/*下面从网上搜到的,感觉不难理解: 现在确定好了Y,我们来考

2010-07-11 09:02:00 731

原创 POJ_1694_An Old Stone Game

<br />///对于树的每一层来说,将这一层每一个节点的需要的石头的数目计算并存储,然后对这些数目进行排序///从最大的数目开始例如a1,a2 。。。a1满足,若a1大于a2,则除去a1之后应该还剩a1-1个石头,又因为///a1大于a2所以a1-1个石头必然满足a2。若a1等于a2,则a1-1小于a2,应该添加一个石头,如此考虑。。///排序 #include<stdio.h>#include<algorithm>using namespace std;int tree[20

2010-07-09 23:48:00 487

原创 POJ_1328_Radar Installation

<br />///贪心,将每个岛屿作为圆心,计算出在坐标轴上满足条件的区间,然后将所有的区间从大///到小进行排序,将下一个区间的左边界与上一个区间的右边界进行比较,并更新数据。 #include<stdio.h>#include<stdlib.h>#include<math.h>typedef struct node{ double l,r;}coordinate;coordinate position[1005];int n,d;int compare(co

2010-07-05 19:36:00 343

原创 POJ_1230_Pass-Muraille

<br />///贪心,计算出每一列所能遇到的wall的数目,对于每一列,若wall数目小于k则判断下一列,否则//对这列进行如下操作:找出起点不大于当前列而终点不小于当前列的墙,取其中终点减去当前列最大//的那面墙,将其删去,(这里是贪心,即去掉对后面影响最大的墙),同时还要更新每一列的墙数//num[i]的值。 #include<stdio.h>#include<string.h>int num[105],wall[105][4];int n,k,ans;int sort

2010-07-03 14:52:00 670

原创 POJ_1083_Moving Tables

<br />///在discuss中看到的方法,将走廊分成200份,统计每一份的次数,最大的乘以10即是结果///我的理解是,所有的搬运任务最终都会完成,同一门前同一时间内最多有一张table在搬运///,因此200份中最大的代表用的最少的时间。这最少是指每一个10分钟都要用到最大的那个///门前,如果有一次不用的话,时间则有可能会增加///还有一种方法就是将s按从小到大的顺序排列后按s进行贪心。 #include<stdio.h>#include<string.h>#inclu

2010-07-03 12:25:00 427

原创 POJ_1018_Communication System

<br />////枚举+贪心,枚举每一个带宽作为最小带宽,然后寻找每一个设备中带宽大于或等于最小带宽但是价格最低////的设备,比较每一次B/P的结果,取最大值 #include<stdio.h>#include<time.h>int bp[105][205];int price,bandwidth;double max;int sort(int *num){ int i,j; for(i=4;i<=2*num[0];i+=2) { for(j=2*num

2010-07-02 15:26:00 397

c函数速查

很好,很详细,不错哦

2008-05-19

空空如也

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

TA关注的人

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