- 博客(87)
- 收藏
- 关注
原创 BC - King's Order - 数位DP
题意:给你一个字符串的长度n在这个n长的字符串里不能出现连续超过3次的的字符。问符合该条件的字符串有几个。思路:一个比较暴力的dp方法:开一个三维dp数组dp[串长度][添加字符前的最后一个字符][最后一个字符重复数]这样我们对于每个长度枚举新添加的一个字符和倒数第二个,如果新加字符与倒数第二个字符相同我们对于每一个重复情况都向下递推累加。如果不同我们让dp[当前长度][最后一个字
2016-03-17 20:56:01
412
原创 某不知名的题 - 概率DP
两名玩家进行对战,P1拥有N点血量,P2用有M点血量。两人均有一定概率可以打出1-6点上海,每次两名玩家进行对战的时候,伤害高的一方可以打掉伤害低的一方一点血量。已知N,M以及两名玩家的攻击力概率。求P1是胜利的概率。输入多组输入,魅族输入两个整数N,M表示玩家的血量(1随后输入两组浮点数每组6个浮点数,分别表示P1,P2打出1-6伤害的概率。输出对于每组输入输出P1的
2016-03-17 19:04:16
572
原创 poj-3112 Pie
题意:某人过生日,他的朋友来他家参加party并且每人都拿来一块pie,现在需要把pie都分开让每个人都能享用,并且一定保证完整性,为了能公平的分给每个人,就算浪费也可以。问最多每个人可以得到多少体积的pie思路:由于需要求圆柱体积所以π是一个问题,我们先把所有体积里的π提出来,然后二分枚举R^2(也就是体积),最后再乘上π即可。(注意π的精度需要很高)#include #include
2016-02-27 14:53:30
537
原创 poj-3273 Monthly Expense (二分)
题意:一共有n天的消费情况,让你分成m段,使得这m段都尽量的小,最后输出最大的那段的值。思路:直接二分枚举一段里的值,每举出一个就来检测在该值下连续分段分出的段数,如果段数大那么答案需要大于该值,如果小,那么答案需要小于该值。#include #include #include #include #define LL long longusing namespace std;
2016-02-27 14:44:56
639
1
原创 poj-1905 Expanding Rods (二分)
题意:一个板子加在两个墙之间,如果加热它,那么它就会向上弯曲,并且给出弯曲后长度的变化公式 L'=(1+n*C)*L。求变化后板子的最高处离原位置多高。思路:普通几何题,各种做辅助线,之后设升高度为h通过h,l,r三者勾股定理得到一个等式。之后我们需要意识到的是c++里有三角函数,我们可以通过l,r求出扇形区域圆心角角度,用arcsin转化为弧度后可建立高度h与弯曲长度L’的关系。之后二分
2016-02-27 14:30:00
418
原创 poj-1185 炮兵阵地
中文题意不解释,由于一行最多10位也就是一行中所有状态只有1000+,并且根据题目描述每一个炮的周围左右两位是不能放第二个的,所以我们可以再缩小状态数量,最后大约60+。炮的上下也是不能放第二个炮的所以我们可以知道,当前的状态会与之前两个状态有关,由于我们缩小了可用状态的数量我们可以对于每一行,枚举当前行和前两行的状态,根据状态的相关性我们可以得到状态转移方程。dp[i][j][k]=max(dp
2016-02-25 17:15:13
379
原创 HDU 1054 Strategic Game
题意:给定一个图每一个点能够观察到相邻的所有点,问最少需要多少个顶点就能够覆盖整个图。思路:最小顶点覆盖问题,很基础,直接建图求最大匹配然后/2得答案,二分图的最小顶点覆盖直接就是最大匹配数。#include #include #include #include #include #include using namespace std;struct node{
2016-02-25 17:02:46
341
原创 poj-2411 Mondriaan's Dream (状态压缩dp)
题意:给你一个h*w的矩阵,让你使用一个1*2的板子把矩阵覆盖完全,不能重叠且不能有空缺,问有多少种覆盖方法。思路:首先我们可以知道木板的摆放有3种方法,横着放,竖着放,不放。 我们设定横着放占两格状态为11,不放占一格为0,竖着的情况特殊处理,因为它占了两行,我们设定上一行为0下一行为1使得对下一行的位置产生影响并且在上一行有所标记。我们可以用dfs来枚举所有的两行间情况。
2016-02-21 10:37:02
452
原创 poj-3007 Organize Your Train part II
题意很好理解,看图都能懂,就不解释了。关键就在于训练计划上的分类,神马标准模板库的应用都是骗人的,不过小用一点也是能过的,不过时间就是800,900的。总之一点也不用c++库函数就稳稳的对。本人是用的c的一些字符串函数,然后字典树来哈希。用高效的字符串哈希函数也可以。#include #include #include #include #include #include #inc
2016-02-21 08:30:36
2008
原创 poj-3258 River Hopscotch (二分)
题意:奶牛过河游戏,河上有N块石头,河的总宽度为L,一位农夫感觉每个石头之间的间距太小了,所以他想通过移除M块石头来使最小的间距最大化。求最大化后的最小距离(姑且是这个题意吧,英语菜)思路:通过二分枚举答案,使low=0,high=L,我们在得到石头的位置数组a[1...n]之后加入a[0]=0,a[n+1]=L然后排序。每次二分初始化一个区间左端点p=0,然后对于a[i]-a[p] i=1.
2016-02-18 15:58:27
453
原创 poj-1364 King
题意:各种背景就不解释了,直接描述问题,给你一个序列a1~an从中取出一个子序列a[si]~a[si+ni](题目打印的有点容易歧义)对每一个子序列求和然后给定一个约束,约束分为两种"gt"表示a[si]+a[si+1]+。。+a[si+ni]>ki "lt"是a[si]+a[si+1]+。。+a[si+ni]输入包含有si,ni,约束条件,ki思路:我们令Sn数组表示从a0加到an。由a
2016-01-28 17:25:59
331
原创 poj-3159 Candies
题意:n个人派发糖果,m组数据包含A,B,C表示B比A糖的数量不会多于C。最后求n比1最多多多少糖。思路:很明显的差分约束,约束条件为B-A#include #include #include #include #include #include #include #define INF 0x3f3f3f3f#define mod 100000000using names
2016-01-27 21:18:42
399
原创 poj-2983 Is the Information Reliable? 差分约束+判负环
题意:给定了n个位点,有m个对这些位点的描述,其中P A B C 表示位点A在B的北边C光年处,V A B表示AB间距离关系不确定,A最少在B的北边1光年处。在m个描述结束后需要你判断这些描述是否合理。思路:我们可以得到约束条件A-B>=C||1 B-A>=-C,即在关系明确时建立一条AB间来回的有向边,表示从A到B的-C距离关系和B到A的+C距离关系,如果关系不明确就建立一个单向的由A到B权
2016-01-27 20:45:31
343
原创 poj-1201 Intervals
题意:给定n个整数闭区间[ai,bi]和n个整数c1-cn,求一个最小的整数集合Z,使得Z里面的数中范围在闭区间[ai,bi]的个数不小于ci个。思路:首先我们可以知道在ai到bi区间内整数的个数为S[bi]-S[ai-1](S[i]为从0到I的所有整数个数)我们可以得到约束条件,S[bi]-S[ai-1]>=ci可转换为S[ai-1]-S[bi]其实还有两个隐藏的条件1)S[i]-S
2016-01-27 20:25:24
254
原创 poj-3254 Corn Fields 状态压缩dp
题意:一农民有一片N*M的地,地里的土地有的肥沃有的不肥沃,0表示不肥沃,1相反。农民需要往这片地里放养牛,一只牛只能在一块1*1的地里且只在肥沃的地里。牛的数量不限,问这片地里能有多少种放牛的情况。思路:首先能确定这是一道dp题,为了简化dp的状态存储,使用了状态压缩,我们可以用一个二进制数来表示一行中土地是否肥沃的情况或者表示一行里能放牛的所有情况,题中说明一行最多12个地那么我们用一个1
2016-01-27 08:35:03
377
原创 poj 2706 Connect
题意:给你一个N+1*N+1的棋盘(从0到N),给定了这局棋的下棋过程,黑子先下,且总的下棋步数为奇数,也就保证最后一个下的是黑棋。其中,每下一步棋如果它的周围(中国象棋或是国际象棋中一个日字的走法)8个点存在同色的棋,并且两个棋之间没有其他棋子连线所拦,那么就将这连个棋子连线。如果黑棋从左边界到右边界有一条线贯穿或白棋从上边界到下边界有一条线贯穿,贯穿的那方就获得胜利。原题意为问黑子的最后一步是
2016-01-24 19:54:32
510
原创 poj-1472 Instant Complexity
题意不多说,直接解释需要模拟的东西吧。题目中会给你一段题中创造的程序,这个程序除了最开始的BEGIN到END,内部就是从LOOP到END,中间的所有OP或者是其他嵌套的程序都是相加关系,最后的LOOP x是将内部的式子乘x,拿输入样例举例BEGIN LOOP n OP 4 LOOP 3 LOOP n OP 1 EN
2016-01-24 09:16:17
345
1
原创 poj 3321 Apple Tree
题意:一颗苹果树,树上有n个树枝节点,一个节点有一个苹果,有n-1个树枝。模型是即n个点n-1条边的树,叉数不定。对这棵树可进行两种操作,其中Q x是询问第x节点上子树的苹果个数,C x是如果x节点上有苹果,就会被拿掉,如果没有,树就会长出苹果。思路:本题关键就在于建立树和树状数组的映射关系。对于每一个树枝节点,我们需要知道的就是它的管辖范围,即它下面包括自己一共管了多少个节点,并且指定到具体
2016-01-22 17:15:23
817
原创 poj 1195 Mobile phones
题目看起来就像一个模拟题,对于一个s*s的矩阵有4个操作,输入0时将s*s的矩阵清零,输入1时将坐标为x,y的点增加a,输入2时求从r到l从b到t一个子矩阵的所有项和。题目只有一组数据但是有庞大的操作次数,所以普通的二维数组是要超时的,于是我们为了加快对其中数据和访问的速度,使用树状数组。我最开始做这道题的时候先看了一维的树状数组,然后就用一维的写了一发,4000+ms不过也过了,后来发现有二维树
2016-01-22 14:53:18
330
原创 平衡二叉树
Time Limit: 400MS Memory limit: 65536K题目描述根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根。输入输入一组测试数据。数据的第1行给出一个正整数N(n 输出输出平衡二叉树的树根。示例输入588 70 61 96 120示例输出70
2015-12-24 10:46:11
523
原创 HDU - 1506 Largest Rectangle in a Histogram
题意:给你n个木板的长度,且宽度都为1,让你找出最大的矩形区域面积思路:这道题的关键就是算出每个可能的矩形的面积,而面积的计算方法可以是从一个板开始找出可向左延伸和向右延伸的边界,若左边界为L右边界为R,那么矩阵大小公式就是H[i]*(R-L+1),此时我们需要找到每个板可延伸到的边界。此时用两个数组L[i],R[i]来表示第i个板的左右延伸边界。计算边界的方法为 for(i
2015-10-29 21:24:28
297
原创 HDU - 2955 Robberies 01背包
简单说下背景,有个人要抢银行,对于每个银行有银行里存的钱数,以及抢了以后被抓住的概率,对于每组数据有一个可以被接受的最大被抓概率(我们称px),和要强的银行个数。首先开始我自己没有读懂题只是凑了一下数据发现可以是一个以概率为背包容量的01背包,然后将概率转化为了整数再用普通01背包装银行的钱数,然而无论乘多少倍将概率化整是无法真正实现的。所以正确的思路是以总共抢的钱数作为状态,对于每一个钱数存在一
2015-10-22 20:16:49
369
原创 优先队列多级排序
#include #include #include #include #include #define LL long longusing namespace std;struct node{ int num,data; friend bool operator<(node a,node b) { if(a.data==b.data)
2015-08-27 19:30:05
466
原创 poj-1260 Pearls
题意:给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。例如样例Input的第二个例子:31 101 11100 12需要买第一类1个,第二类1个,第三类100个按常规支付为 (1+10)*10 + (1+10)*11 + (100+10)*12 = 1551元(一共买了102个珍珠)但是如果全部都按照第三类珍珠的价格支
2015-08-24 21:18:10
394
原创 poj-1836 Alignment
题意:有一个队军人排成一排,但是高矮并不安顺序。为了使这个队伍中的任意一个人都可以看到左端或右端,需要让几个人出列。给你一个队列求最少需要出列的人的个数。 思路:因为需要看到队伍的最左端或者最右端这就需要队伍自左向右身高的递增的或者自右向左递增。(注意题目描述与实际要求有出入,题目要求是看到端点的人,而题意为看到队伍物理上的最左或右端,即最左边人的左边为左端,相反也是)所以该题可
2015-08-24 20:27:32
410
原创 poj-2367 The Cow Lexicon
题意:字典里有W个词,输入一个长度为L的字符串,求最少删除几个字母后使得字符串里的所有词都可以在字典里找到。 思路:从字符串的左端开始每移动一位都先默认这些字符都需要删除,因为没有找到匹配的单词即 dp[i]=dp[i-1]+1 直到指针移动的长度在字典里能够找到单词,找到相同长度单词后,从单词末尾和指针之前的字符匹配如果可以完全把字典里的单词匹配完,此时意味着之前删除的部分字符
2015-08-24 20:15:58
307
原创 [周赛] FZU 2177
DescriptionYtaaa作为一名特工执行了无数困难的任务,这一次ytaaa收到命令,需要炸毁敌人的一个工厂,为此ytaaa需要制造一批炸弹以供使用。 Ytaaa使用的这种新型炸弹由若干个炸药组成,每个炸药都有它的威力值,而炸弹的威力值为组成这个炸弹的所有炸药的最大威力差的平方,即(max-min)^2,假设一个炸弹有5个炸药组成,威力分别为5 9 8 2 1,那么它的威力为(9-1)^
2015-08-24 18:50:55
375
原创 [周赛] HDU-5056 Boring count
Problem DescriptionYou are given a string S consisting of lowercase letters, and your task is counting the number of substring that the number of each lowercase letter in the substring is no more th
2015-08-24 08:54:23
370
原创 poj-1276 Cash Machine 多重背包
题意:我们需要去取款机取钱,而取款机内钱的种类和数量是有限的,最后要求出我们最多能取到多少钱。 思路:很明显的多重背包问题。对于这个题最普通的01背包限制次数的写法是一定会超时的,所以我们需要去优化,两个优化方法,一个是二进制优化,另一个是完全背包限制次数。这3种方法的代码都会在后面发出来。TLE代码(01背包限制次数)#include #include #inclu
2015-08-21 15:59:47
578
原创 poj-1442 Black Box
题意:为了方便我通过解释输入数据来解释题意。输入两个数M表示序列长度,N表示输入N个数表示当前序列插入了几位,例如n=1序列里插入了3,n=6序列里插入了3 1 -4 2 8 -1000,对于第i个输入的n输入当前插入的序列中第i小的数,也就是前i小的数中最大的数。 思路:使用两个优先队列,递减队列中存前i小的数,递增队列中存剩下的数。每次输入n,就先向递增队列中压入n个数,然后
2015-08-21 15:15:48
677
原创 poj-1129 Channel Allocation
题意:广播电台分布在一个很大的地方,每个广播电台为了受到更强的信号会使用一个中继器,而每个相邻的广播电台之间如果使用相同的中继器会干扰信号。问最少需要多少个中继器可以让所有广播电台使用并不相互影响。 思路:该题可以模拟成涂色问题,每个相邻的区域不能涂相同的颜色。这也就会想到著名的四色原理。根据四色原理对每个区域只需要枚举4种情况即可。每个点只枚举一次,DFS里其实并没有回溯的过
2015-08-21 15:01:08
331
原创 poj-2676 Sudoku
题意:数独,一种数学游戏。规则:空白处填入数字,使数独的每一行,每一列,每个宫格中没有重复数字。 思路:该题DFS暴搜就能过,数据比较水,真正厉害的数独题是3074(本人目前无力AC)。#include #include #include #include #include #include #define INF 0x3f3f3f3f#define mod 10
2015-08-20 14:31:22
507
原创 poj-1416 Shredding Company DFS
题意:有一个碎纸机,给你一个最多有6位数的纸片,需要让你将纸片切开,使得切开的纸片的数值和最接近或等于target值。输入target和纸片,输出最接近target的值和纸片的切法。特殊规则:如果纸片的值和target相等,那么不用切开。如果所有情况下都不存在小于target的切法,那么输出error。如果最终的答案有多种,那么输出rejected。 思路:DFS搜索所有切开纸片
2015-08-20 14:05:23
559
原创 poj-2531 Network Saboteur DFS
题意:有n个点,把这些点分别放到两个集合里,在两个集合的每个点之间都会有权值,求最大的两集合间权值和。如果用图论解释的话,就是求两个完全图之间最大割边和。 思路:DFS枚举所有集合分配的情况。累加两集合间边的权值。找出最大和。#include #include #include #include #include #define INF 0x3f3f3f3f#de
2015-08-19 15:46:24
459
原创 poj-3414 Pots BFS
题意:有1,2两个杯子,你需要对杯子进行操作,操作包括fill填满,pour(1,2)将1倒入2种或反过来,drop倒出所有水。求出使两个杯子中出现指定量C的水需要多少步操作,并且输出操作步骤 思路:BFS对六种操作进行搜索,和以往不同的需要在结构体里加一个数组来记录操作(本人用1-6编号进行记录)。输出时对应记录输出步骤即可。#include #include #inc
2015-08-19 13:43:44
465
原创 poj-3126 Prime Path
题目描述其实就是篇小故事,不多解释直接说明题意。题意要求给两个4位的素数,求出将前一个素数转化为后一个素数需要的步数。一次只能改变一位数字,且保证每次改变得到的数都是素数 思路:用BFS暴搜,每次改变一位数如果是素数就进入队列,但是暴搜的前提要把1w以内的素数筛出来。为了方便对每一位上的数的操作,本人用的字符串来储存4位数字。#include #include #include
2015-08-19 09:16:24
494
原创 poj-1426 Find The Multiple
DescriptionGiven a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than
2015-08-18 19:44:33
363
原创 poj-2251 Dungeon Master BFS
DescriptionYou are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit
2015-08-18 16:54:45
667
原创 poj-1321 棋盘问题 DFS
汉语题,不解释题意,该题关键是要找到一个枚举的方法,刚开始搜索的思路不是很好找。我也是参考了其他网友的思路,写了这个代码,不是很好解释,直接看把。#include #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;int n,k,ans;char m
2015-08-18 16:53:18
504
原创 poj-3009 Curling 2.0-DFS
题干很长这里就不复制了,题意的话估计看图就能懂个差不多,这里简单说一下,一个球在2为起点的位置要到达终点3,途中不碰到墙壁球的移动是不会停止的,并且在触碰墙壁停止后,被碰的墙壁会消失。最后得出到达3需要的最少步数。 思路:还是平常的DFS,不过需要多加一点东西就是了,比如点的移动时用一个循环使其向一个方向一直移动到碰到墙或走出边界。该题不需要vis标记数组,因为存在重复走点的情况
2015-08-18 14:25:48
417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人