自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiefubao的专栏

业精于勤荒于嬉,行成于思毁于随

  • 博客(65)
  • 收藏
  • 关注

原创 poj3301(三分-坐标旋转)

题意:给出最多30个点的坐标,求覆盖所有点的最小正方形面积。解法:没有证明正确性,网上对于此法的正确性有争议。反正是用三分过的,也许数据弱了。就是在0-90度的旋转范围内三分角度(所有点旋转的角度)。正方形的边总是平行于坐标轴的,那么每次正方形的边长总是最大x坐标之差和最大y坐标之差中更大那个。      点旋转A后的坐标公式                         

2014-01-27 00:51:51 907

原创 FZU 2103(Bin & Jing in wonderland)组合数学

题意:n种礼物,每种都有无限多个。每次随机选一种,第i种每次被选中的概率Pi。共选K次,然后从中选出序号最大的r个。问这种情况的概率有多大。解法:枚举r中最小序号A的个数,把比r小的看做一个整体。求A每一种情况下的整体概率,然后相加。代码:/***************************************************** author:xiefu

2014-01-26 22:20:33 1022

原创 poj1651 (区间dp)

题意:n个数中,每次选一个数和左右相邻数相乘,并且从中删除。最右边和最左边的数不能选,选数的顺序随意,最后n-2个乘积之和最小是多少.解法:区间dp,记忆化搜索,水题。以此题开始,以后代码风格会变一些,开始尝试使用一些简化代码的预定义了,希望能够提高一点编码速度。代码:/***************************************************** a

2014-01-25 14:14:39 668

原创 CF385C-(Bear and Prime Numbers)线性筛素数

题意:给出n个数n (1 ≤ n ≤ 106): x1, x2, ..., xn (2 ≤ xi ≤ 107).            然后m (1 ≤ m ≤ 50000)次查询, [Li, Ri] ;输出每次Li与Ri之间所有素数的P值之和。每个素数的p值的定义是这样的:P(x)表示在给出的n个数里面有多少个数是x的整数倍数。解法:在线性筛素数的时候,把每个素数的P值可以直

2014-01-25 12:15:27 906

原创 NYoj737 石子合并(区间dp)

题意: 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。解法:动态规划的思想。先求出所有区间长度为2的合并代价,然后再算出长度为3的、4的。。。。n的。复杂度是N^3,貌似楼教的一道同样问题有更快的算法,会尽快去膜拜,。,。,。

2014-01-24 14:00:08 712

原创 FOJ 2141(随机子图)

题意:给一个n个点,m条无向边,将图的点分成两部分,两部分之间的边数大于等于输出m/2。解法:随机,居然可以过,不懂是不是正解;将图中的点不断地随机分成两部分直到满足要求,然后输出。代码:#include #include #include #include #include using namespace std;int n,m;bool graph[110

2014-01-24 00:14:52 630

原创 FOJ 2148(求凸四边形数量)

题意:给n个点,求图中凸四边形的数量。解法:n代码:#include #include using namespace std;struct point{ int x,y;} points[40];int abs(int k){if(k<0) return -k;return k;}int mult(point a,point b,point c){

2014-01-23 23:30:05 839

原创 Foj 2147 A-B Game

题意:给出两个数A,B(A>B),每次操作A-(A%x),x任选,问至少需要几次操作能够使得A解法:简单贪心。每次x都取A/2+1。代码:#include #include using namespace std;int main(){ int t;long long A,B;int an=1; cin>>t;while(t--) {

2014-01-23 23:22:54 629

原创 fzu 2150 Fire Game(广搜)

题意:给一个矩阵,'#'代表草地,'.'代表空地。只能最多从两个草地位置点火,问烧完全部的草地需要几个时间单位。当一个草地点燃之后,下一个时间单位它的上下左右位置的草地也将点燃,空地不可点燃。矩阵大小10*10.解法:BFS,做的方法有点弯了,其实直接枚举任意两点就行了,自己刚开始还去搜索计算有多少联通块,然后分类,其实不必这么麻烦。代码:#include #includ

2014-01-23 23:17:47 637

原创 poj2923 状压记忆化搜索

题意:n个货物,第i个重量为Wi,有两只船,载重分别为C1,C2。问至少需要两艘船运几趟才能将n个货物运完。解法:由于n小于等于10,可以联想到状态压缩。求出两艘船一次可以运送的状态(将两个船分别一次可以运送的状态取 ‘或’ 就可以了)。然后就是常规的记忆化搜索。代码:#include #include #include using namespace std;int wo

2014-01-23 23:11:20 696

原创 poj4497

题意:给   出gcd(x,y,z)=G,lcm(x,y,z)=L,求x,y,z有多少种组合(考虑顺序)。解法:首先,x,y,z都是G的倍数,L/G则会分配给他们来承担。将L/G分解质因数,例质因子a出现了n次,首先在x,y,z中一定有一个或两个没有a,而且一个或两个有n个a。将其分成两类:1、一个有n个a,一个有0个a,另一个1-n-1 ;2、一个有n个a,其余两个均为有0个a; 3、两

2014-01-23 03:18:25 560

原创 hdu4496 求连通分量个数

题意:题意可以转化为:不断给一个图加有边,问每次加边后图的连通分图有多少个。解法:裸的并查集,开始时n个点各自属于一个连通分量,每次加边都有可能将两个联通分量连起来,也有可能是在一个联通分量加了一条边,主要就是判断加边的两个点的根父母是否是同一个点,若是则两点属于同一个连通分量,否则就是两个联通分量,这时连通分量数就会减一。代码:#include #include #i

2014-01-23 02:58:56 703

原创 hdu4597(区间dp)

题意:给定两个卡片序列,每张卡片都有一定的分数,Alice和Bob轮换从两个序列中拿卡片,每次只能从序列头部或尾部取走卡片。问Alice先取的话,最多可以取到的卡片分数和最多是多少。解法:区间dp,ans[i][j][k][h]表示在第一个卡片子序列i-j,第二个卡片子序列k-h里,先取者最多可以得到的分数。每次取时最多有四种选择,取剩下的ans[i+1][j][k][h]、ans[i

2014-01-23 02:39:06 923

原创 hdu4499(剪枝搜索)

题意:给出一个象棋矩阵,在部分点上有棋子,问其他空点上最多能够放置多少个炮并且使得所有炮两两之间不能相互攻击(可以相互攻击指的就是炮与炮之间有且只有一个棋子)。解法:由于矩阵最大5*5,所以2^25有点勉强,,但是中间过程的剪枝真的很有效,而且可以保证只要深搜到最后一个格子就一定是合法的排布。深搜是从左上到右下,这个剪枝就是每放一个炮时,都在其所在行与列检查一下是否有可以攻击的炮,检查

2014-01-23 02:11:13 972

原创 hdu4495 求最大对称直角等腰三角形

题意:给出一个字符矩阵,求出字符矩阵中面积最大的对称直角等腰三角形。         例如:                    abg                    bcc                    gde   的最大结果是左上三角形,面积为6;由于直角等腰三角形有四种朝向。(分别为直角朝左上,左下,右上,右下),所以要计算四种情况的最大值。这里只说第一

2014-01-23 01:54:15 863

原创 uva10815 分离字符串

题意:将从文件中读入的所有字符,大写改为小写,去掉非字母字符,然后单词去重按字典序输出。解法:刚开始以为例如aa_bb是一个aabb单词,后来wa了几发发现要处理为两个单词。本来想重写的,后来突然发现可以在原代码上加个递归就可以处理这种情况了,感觉很舒畅,由于map本来就是按字典序排的,所以直接输出就好了。代码:#include #include #include #incl

2014-01-23 01:42:13 521

原创 poj2329

题意:给出一个n*n的矩阵,非零的位置不变输出,对于0的位置如果最近的非零位置只有一个则输出那个最近非零值,否则输出0本身。Aij , Apq距离的定义为  |i − p| + |j − q|. 解法:搞了一发dp,从左上到右下,从右下到左上各扫一遍。代码:#include #include #include #include using namespace s

2014-01-22 15:28:26 788

原创 poj1465剪枝广搜

题意:找到数aim的一个最小整数倍数,对倍数的要求是这样的:倍数中只能出现给定的几个数字。解法:广搜。本来暴力广搜是会超时的,但是这里有个很强的剪枝,那就是在搜索中,如果数A余aim的值在之前已经出现过了的话,就没有再将其搜下去的意义了。          因为如果B%aim等于A%aim,且B代码:#include #include #include #include usi

2014-01-22 12:54:01 1131

原创 ural1057(数位dp)

1057. Amount of DegreesTime limit: 1.0 secondMemory limit: 64 MBCreate a code to determine the amount of integers, lying in the set [X;Y] and being a sum of exactlyK different integer de

2014-01-22 00:51:05 985

原创 hdu4734(数位DP)

题意:For a decimal number x with n digits (AnAn-1An-2 ... A2A1), we define its weight as F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1. Now you are given two numbers A and B, please cal

2014-01-21 20:16:41 645 3

原创 hdu4815长春赛C题

题意:n个分数,猴子每个分数都有0.5的可能性得到,现在小老虎想要在至少P的概率上分数不低于猴子,问小老虎至少要多少分。解法:就是一个概率的背包;每一次循环,ans[j]记录着猴子在前i个分数之前得到j分数的概率。转移方程              ans[j]=ans[j-num[i]]*0.5+ans[j]*0.5; (j>=num[i])              ans

2014-01-21 13:50:29 765

原创 CF383A Milking cows

题意:现在要给站成一排的n头牛挤奶,每头牛都要么面朝左要么面朝右。在给一头牛A在被挤奶的时候,未被挤奶并且面朝A的所有奶牛都会受到惊吓而奶质量降1,可以认为每头牛的奶质量足够大(每次都够减)。问选择最佳的挤奶顺序使得总质量损失最小,输出最小的损失量。解法:就是一道思维题,可以这样理解。za

2014-01-21 03:42:46 681

原创 poj1155(树状DP)

题意:电台发射站作为树根节点,向其他节点发射信号,每个叶子节点是一个用户。其余节点都是中转站。每条边都有一个代价费用,每个用户都有自己愿意缴纳的费用,问要使得总代价费用不低于所服务的用户所付出的费用,最多能服务多少个用户。解法:树状DP。num[i][j]记录着i节点为根的子树中服务j个用户(即叶子结点)的最佳费用(收的费用减掉边代价花费)。在转移状态的时候,因为对于一个节点的num[

2014-01-21 03:09:19 491

原创 poj1221

题意:计算出一个数可以划分为多少个单峰回文数序列。解法:DP。num[i][j]记录着数i可以划分为以大于等于j的数开头和结尾的单峰回文数的数量。开始初始化num[0][i]全部为1.转移方程:           num[i][j]=1                                         (i==j)      (j==i)

2014-01-20 18:38:49 1043

原创 poj1659(贪心构造图)

题意:给出一个无向图中所有点的度数,要求输出一种图的构造。解法:就是个贪心,第一次遇到这个题是在长沙区域赛上,当时是一道几乎一样的题目,当时在场上想到了这个贪心方法,还简单证明了一下,。,。,。但是由于比赛时那个题目过的人很少,加上一直在帮队友调试卡的题目,所以场上没有敲,还是水平太逗了,。,。现在做1A,其实真的很简单。就先将度从大到小排序,然后将最大的那个度依次往后分配,然后一直迭

2014-01-20 15:17:58 774

原创 poj2823

题意:给n个数,求出每连续k个数中的最小值和最大值。解法:暴力的话n*k一定超时,此处用的是裸写的单调队列,输出最小值时,维护队列单调递增,输出最大值是维护队列单调递减。每次输出队头元素,如果队头元素的下表位置距离队尾大于k,队头就一直抛出。代码:#include #include using namespace std;struct point{ int num;

2014-01-19 22:17:47 571

原创 poj2817(N!的状压DP)

题意:将n个长度最多为10的字符串排列n行,上下对齐位置可以任意平移,将每一行与上一行对齐相同的字符数加起来,问最多总共能有多少个。将最终数量输出。例:5 abc bcd cde aaa bfcde 的结果展示如下:aaa abc bcd cde bfcde解法:方法是状态压缩记忆化搜索。以前做的状态压缩都是对于解集是2^n数量级形式的,做

2014-01-19 19:28:39 546

原创 poj3274

题意:  解法:bit[i][j]记录着前i个数中,j位有多少个,然后通过以下几行乱搞了一个hash: for(int j=0;jk;j++) mi=min(mi,bit[i][j]); for(int j=0;jk;j++) tool+=(long long)(1j%15))*(bit[i][

2014-01-19 13:06:29 916

原创 poj3064(组合数学计数Dp)

题意:有T种蚂蚁,每种的数量是Ni,从中取S到B个,问总共有多少种不同的取法,结果模1000000;解法:ans[i][j]记录着在前i种蚂蚁中取j个有多少种取法,转移方程是                 ans[i][j]=ans[i-1][j]+ans[i][j-1]                                  when (j

2014-01-19 12:27:44 648

原创 poj2054(贪心)

题意:有一棵树,每个节点都有一个代价基值Ci。现在要给每个点染色,第一个染根节点,其余的节点染色的时候其父节点必须已染色。每个节点染色会用掉一个时间单位,每个节点染色的代价是染完此节点时的总时间T*Ci。问染完全部节点所需要的最小代价。解法:这道题真的略吊,不过最终我还是看了网上的题解才会做的。每次基值最大的节点一定会是在父节点染完色后马上进行染色的,然后可以假想此节点就可以和父节点合

2014-01-18 20:59:52 3010

原创 poj3439(广搜)

题意:服务器有两个插头,两个插线的长度给出。并给出n个插座的坐标,在服务器不会断电的基础上,通过俩个插头轮换插板。问从起点插座到终点插座要换几次。解法:建图用最短路肯定可以。这里我用了广搜。复杂度应该都是n^2;代码:#include #include #include #include using namespace std;int n,start,en;double

2014-01-18 15:07:44 734

原创 poj1661

题意:场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。 Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。 计算Ji

2014-01-17 18:40:25 1045

原创 poj2353

题意:从第一行任意位置开始走到最后一行任意位置。只能向下向左向右走。输出一个最短的路径。解法:DP。从下向上,每行正反遍历搞两次。输出路径的时候乱搞了一发dfs。代码:#include #include #include using namespace std;int num[110][510];int ans[110][510];int N,M;int fin(int a

2014-01-17 17:27:13 902

原创 poj1511

题意:读了半天才看明白,英语太差了。。。。最终就是在有向图中,求所有点到1号点的最短往返距离之和。解法:建了两遍图,正向见一边建的图,反向建一遍回的路。然后spfa求两遍。代码:#include #include #include using namespace std;struct edge{ int v,w; int next;} edges1[100001

2014-01-17 17:19:12 765

原创 poj3256(SPFA最短路)

题意:K头牛分布在N个草场上,要聚在一起。草场与草场之间是有向边,问共有几个草场可作为K头牛聚集的地方。解法:以每个草场为起点,用SPFA算法求出所有草场到它距离,如果所有有牛的草场可达此草场,则此草场可作为聚集的地点;枚举每个草场,求出数量即可。SPFA的期望复杂度是O(E),所以总复杂度是O(E*V)。#include #include #include using namesp

2014-01-16 22:12:56 759

原创 poj3275

题意:要给N头牛的产奶能力排序,已经给出M对的大小关系,问至少还要多少对关系才能完成整个排序。思路:问至少还要多少对的关系,并不依赖于比较过程。也就是说经过那么多次比较,无论结果是什么,都可以完成排序。最终的解法是这样的:答案就是还有多少两两无法确定的关系对。用邻接表实现floyd算法,算出联通矩阵,然后再判断还有多少对牛无法确定他们之间的关系。#include #include #inc

2014-01-16 20:42:45 785

原创 poj2063

题意:裸的完全背包。解法:刚开始觉得空间不够,滚动数组也不够,没有想到可以除以1000这个方法。 除以1000后太裸了,不说了。。。#include #include #include using namespace std;const int inf=50000;int ans[50010];int m;int num[20];int money[20];in

2014-01-16 16:39:12 484

原创 poj3278广搜

题意:从一个数通过可以通过-1,+1,*2等变换操作得到另一个数的最少步数;解法:广搜#include#includeusing namespace std;struct point{    int num;    int steps;};point points[1000000];bool rem[1000100];int start,en;bo

2014-01-16 16:39:10 489

原创 poj3083(深搜和广搜)

题意:在一个迷宫中,从特定起点开始走向特定终点。输出三种走法的步数:1、向左优先 2、向右优先 3、任意走法的最短步数。 解法:前两种都是一直深搜。第三种用模拟队列实现广搜。#include#include#include#includeusing namespace std;char maze[45][45];int num[2][4]{0,-1,0,1,

2014-01-16 16:39:08 590

原创 poj1159(回文串)

题意:对于一个字符串,问至少插入几个字符才能使得原串成为回文串。思路:一道没有做过的经典题,将原串翻转,答案为原串长度减掉两字符串的最长公共子串(非连续)长度。int会MLE,由于字符串长度有限,short就够了。

2014-01-16 16:39:06 765

空空如也

空空如也

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

TA关注的人

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