自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ 3624 Charm Bracelet(0,1背包)

题意:有n件珠宝,每件珠宝有一定的重量和价值,求出在不超重的情况下所能拥有的最大珠宝价值。思路:0,1背包问题,即F[i; v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:            #include//dp[i][j]=max(dp[i-1][j],dp[i-1][j-c[i]]+v[i])int max(int x,int y){

2013-08-13 16:49:08 489

原创 HDU 1392 Surround the Trees(求凸包周长)

题意:有n棵树,每棵树给出它的坐标,现在以一些树为端点构造围墙将所有树都围起来,求出围墙的总长度。思路:凸包问题,将树看成点求出凸包,然后求出凸包的周长即可。注意:当n=1和n=2时要特判,n=1时为0#include#include#include#includeusing namespace std;const int MAXN=1000;struct point{

2013-08-12 23:09:36 507

原创 POJ 1160 Post Office(DP)

题意:有m个村庄排成一条直线,现在需要在这些村庄里建n个邮局,使得各个村庄到最近邮局的总距离和最小。  思路:用dp[i][j]记录把前i个邮局建到前j个村庄中的最优解。            用cost[i][j]记录所有在i到j村庄中,建1个邮局的最小代价。            让前i个邮局覆盖前j个村庄,第i+1个邮局覆盖第j+1至j+k个村庄(j+k dp[i+1][

2013-08-12 23:02:17 1006

原创 POJ 2007 Scrambled Polygon(极角排序)

题意:给你多个点,让你将其逆时针输出。思路:直接极角排序输出即可。#include#include#include#includeusing namespace std;struct node{ int x,y;};node point[1000];int cross(node p0,node p1,node p2) //计算叉积 p0p1 X p0p2{

2013-08-12 16:20:15 546

原创 POJ 3080 Blue Jeans(KMP)

题意:有多个基因碱基序列(只由AGCT组成),在这些序列中找出一个最长的公共子串,如果长度相等,优先输出字典序较小的串。思路:由于数据较小,所以直接枚举第一个串中的子串,然后依次对之后的串每次作一次KMP判断是否匹配即可。注意:当串的长度相同时,要优先输出字典序较小的串。(尼玛最开始没看到好蛋疼)# include# include# includeusing namespace

2013-08-12 13:07:28 478

原创 POJ 1474 Video Surveillance(判断多边形是否有核)

判断多边形是否有核,利用半平面交即可。直接套模板#include #include const int INF=120000000;struct Point{ int x, y;}pt[150];typedef struct Point Point;bool turn_right[150];int det(Point s1, Point t1, Point s

2013-08-12 01:23:12 558

原创 POJ 1269 Intersecting Lines(判断两条直线关系)

题意:给你四个点确定两条直线,判断两条直线的位置关系。思路:直接判断斜率存不存在。              a.其中一条斜率存在,一条不存在——两者一定相交            b.两条斜率都不存在——判断x坐标是否相等,如果相等就重合,不相等就平行            c.两条斜率都存在——直接求出交点即可#include#include#include#de

2013-08-12 01:19:32 610

原创 POJ 1088 滑雪(记忆化搜索)

题意:给出一个图,求出最长的下降序列的长度。因为在搜索的过程中,我们可以利用到之前搜到的结果,因此我们需要储存之前的结果,当我们需要使用之前结果时直接调用,不用再次计算。记忆化搜索的想法就是这样,其实实现也是相当简单的,只需在之前搜索的代码上加一个判断语句就够了。#includeint r,c,height[120][120],dp[120][120];int dx[10]={-1,1,0,0

2013-08-12 01:10:08 456

原创 计算几何常用总结

点积:即a*b*cosc,可以用来判断前后问题。设A=(x1,y1),B=(x2,y2),则A*B=x1*x2+y1*y2叉积:   即a*b*sinc,可以用来判断两矢量之间的顺时针和逆时针关系。                   设A=(x1,y1),B=(x2,y2),则A*B=x1*y2-x2*y1                 若 P * Q > 0,则 P 在

2013-08-09 11:04:39 399

原创 POJ 2398 Toy Storage(叉积的简单应用)

题意:有一个盒子,里面有n块隔板将其分为n+1个部分(挡板坐标已给出),现在给出m个球的坐标,让你判断每个分割出的部分里面有多少个小球。思路:利用叉积判断每个挡板是在球的左侧还是右侧(叉积>0在左侧,叉积#include#include#include#include#define eps 1e-10#define maxn 100000+10struct point{

2013-08-09 10:41:32 532

原创 POJ 2406 Power Strings(KMP的应用)

问题描述:给定一个字符串L,已知这个字符串是由某个字符串S重复R次而得到的, 求R的最大值。方法一:直接暴力枚举子串长度,从1到len/2一一判断,如果合法即进行输出。#include#includeint main(){ char s[1000000+100]; int i,j,k,len,ok; while(scanf("%s",s)) {

2013-08-08 16:53:43 459

转载 字符串匹配的KMP算法

原文地址:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html我个人觉得讲解较为清楚的一篇KMP算法讲解,就是没有代码。

2013-08-08 14:43:17 433

原创 HDU-2529 Shot(物理题)

设角度为a,水平分速度Vx = v * cosa,竖直分速度为Vy = v * sina,大家都知道水平速度是不变的,所以球的飞行时间就是t = l / Vx.时间确定后,只要算出竖直方向之速度在经历时间t后达到的高度即可(因为你必须首先得到篮筐),这样加上起始高度就是最大高度.因为距离公式是S = Vy*t- (1/2)*g*t*t。所以这题最后高度H = h + Vy*t- (

2013-08-06 16:58:19 771

原创 POJ 1458 Common Subsequence(求最长公共子序列)

题意:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列。令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij=yj。例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列。思路:动态规

2013-08-06 11:09:23 511

原创 CodeForces 315B Sereja and Array

题意:给出n个整数,有三种操作。            操作1:输入vi,xi,令第vi个数等于xi,即number[vi]=xi。            操作2:输入yi,令所有的数字都加上yi。即number[1,2,3...n]+=yi。            操作3:输入qi,输出第qi个数。思路:操作1和操作3可以直接进行,而操作2如果每次都对所有数字修改的话复杂度太高因

2013-08-05 11:06:15 861

原创 CodeForces 315A Sereja and Bottles

题意:有n个瓶子,每个瓶子都有自己的商标(商标可能相同)。接下来有n次输入,每次输入a[i]和b[i],表示第i个瓶子的商标是a[i],用商标为a[i]的瓶子可以开商标为b[i]的瓶子。现在让你求出不能开启的瓶子的数目。思路:由于数据较小,所以直接暴力。枚举从1到n个瓶子,然后枚举判断有没有瓶子可以将它打开,如果可以打开就将它mark掉,最后统计输出即可。#include#include#

2013-08-05 10:58:41 1166

原创 HDU 1003 Max Sum(连续子段和)

题意:给定一串数字,让你求出其中一串连续的数字使其和最大。状态转移方程:sum[i+1]=sum[i]>0? sum[i] + num[i + 1] : num[i + 1]。#include#includeint main(){ int t,n,i,j,k,T,start,end,ans; int number[100000+10],dp[100000+10];

2013-08-05 10:50:12 469

原创 POJ 1502 MPI Maelstrom(spfa邻接矩阵)

题意:有n个点和m条边,以下三角形矩阵输入,如果两点可以连通则输入其权值,否则输入x表示两点不连通。让你求出从点1将消息全部传到其它点所需要的最短时间。思路:单源最短路径问题,求出从点1到其余点的最短距离,并找出其中最大的一条即为所求。(SPFA+邻接矩阵)#include#include#include#include#include#include#includeusing

2013-08-04 01:25:39 576

原创 POJ 1126 Simply Syntax

题意:有一个字符串让你判断是否是符合语法规范的句子。            语法:1.从p到z的所有字符每一个都是一个规范的句子(注意每一个字母都是一个句子)                        2.如果字符串S是一个规范的句子,那么字母N紧跟S也是一个规范的句子(两个合并为一个)                        3.如果字符串S和字符串T都是规范的句子,那么字

2013-08-04 01:17:27 816

原创 HDU 2544 最短路(spfa邻接矩阵)

spfa模板题,用的邻接矩阵存储。#include#include#include#include#include#include#includeusing namespace std;#define maxn 999999int n,m,map[110][110],dist[110],vis[110],a,b,c,ans;queueq;int spfa(int x){

2013-08-04 01:09:15 748

原创 HDU 2544 最短路(spfa邻接表)

模板题,用的邻接表写的。#include #include #include #include #include #include #include #define N 150#define inf 999999using namespace std;struct node{ int from,to,value;};queueq;vectorg[N];int

2013-08-04 01:08:10 595

原创 POJ 1125 Stockbroker Grapevine(Floyd)

题意:你是一个股票经纪人,现在要你去散布一些谣言来为你的雇主服务。你需要找到最快的一个方法将谣言传到所有人那里,但是谣言只能从一些人传到另一些特定的人而不能随意传递。现在,让你求出最少将谣言传遍所需要的时间和起始点的坐标。思路:直接Floyd求出所有点之间的最短路,然后枚举第一个到第n个点,每次枚举找出以该点位起点位置到其余点的最长边。然后从n个最长边里面找出一个值最小的即可,即为所需的最短传

2013-08-02 23:55:07 451

原创 目标—加油

对比了下自己和周围的同学,还是太水了。励志,从今天到暑假集训完不在电脑上打游戏!!!HCW,加油啊!!!

2013-08-02 22:57:18 505

原创 HDU 1257 最少拦截系统

思路:求最长不下降子序列即可,从后往前一一枚举。设dp[n]=1,从n-1往1枚举,每次取第i+1个到n个比它高且dp值最大的一个,则dp[i]=max+1。最后,找出dp[1->n]最大的即为所求。//求最长不下降序列的长度#includeint main(){ int n,i,j,k,ans,max; int height[100000],dp[100000];

2013-08-02 15:23:19 368

原创 POJ 1163 The Triangle

题意:给你一个数字三角形,从上往下走。每次只能直接往左下或者右下走,求从最上面走到最下面数字的最大和。思路:动态规划,设dp[i][j]为从最高点到点(i,j)的最大和,那么dp[i][j]=max(dp[i][j+1],dp[i+1][j])+number[i][j]。即每次都取最大的一个,那么直接从最后一层往上推即可。#includeint max(int x,int y){

2013-08-02 15:06:51 404

原创 ZOJ 1354(枚举,模拟)

题意:有一个5*6的矩阵分别代表有这么多灯,有一些灯开着,有一些关着的。现在给出所有灯的初状态,让你输出使所有灯都关闭的开关按法。思路:1.直接枚举所有开关的情况,即枚举2^30种情况,显然这是不能接受的。      2.转化一下思维,假设第一行灯的情况已知,那么我们只需要按第二行的开关就能将第一行灯全部灭掉(按第一行亮着的灯所对应第二行的开关即可)。同理可得,第三行开

2013-08-02 13:17:01 511

原创 POJ 1562/HDU 1241 Oil Deposits(BFS)

题意:有一块m*n的土地,有一些土地下面会有石油。如果一个格子它周围的8个地方有石油,那么就称它们为一块油田(Oil Deposits)。给出该土地石油的分布情况,让你求出一共有多少个不相邻的油田。思路:直接BFS,从第一个位置到最后一个位置都BFS一次,在搜索过程中如果油田已经被搜过则标记下次不再搜索,统计需要搜索的次数即为油田的数目。//同POJ1562,但是PKU上过了,HDU挂

2013-08-02 13:15:12 669 2

原创 HDU 2612 Find a way(两次BFS)

题意:有两个人Y和M,给你一个n*m的矩阵。'.'是道路,'Y'是Y的位置,'M'是M的位置,'#'是不能走的路,'@'是KFC。(Y始终在左上角)现在两个人要到城里的一个KFC碰面,问你所需要花费的最短时间是多少。思路:如果直接从Y搜索到M由于必须经过一个KFC显然不可取,因此转化思路。从Y出发搜索到所有KFC的距离,再从M出发搜索到所有KFC的距离,最后枚举找出一个KFC到两个距离

2013-08-02 13:13:55 559

原创 大数取模模板

#include#includeint mod(char str[],int num){ int number[100000]; for(int i=0;i<strlen(str);i++) number[i]=str[i]-'0'; int remainder=0; for(int i=0;i<strlen(str);i++) {

2013-08-02 13:11:07 513

原创 大数除法模板

原理:直接模拟手动除法即可,注意去除前导0.#include#includeint division(char a[1000],int b,int c[1000])//a除以b存入c中,返回商的位数{ int i,k; int j=0;//j表示商的位数 int count=0;//表示余数 int mark=0;//标记去掉前导0 for(i=0;i

2013-08-02 13:01:03 654

空空如也

空空如也

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

TA关注的人

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