————算法————
Jason_crawford
这个作者很懒,什么都没留下…
展开
-
蓝桥杯基础练习——十六进制转八进制
问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输入对应的八进制正整数。 【注意】 输入的十六进制数不会有前导0,比如012A。 输出的八进制数也不能有...原创 2016-03-07 19:29:18 · 1861 阅读 · 0 评论 -
POJ3262——Protecting the Flowers(贪心)
题目链接 题目大意是说农场主要尽可能的减少牛吃花造成的损失,所以赶牛回牛圈,但是一次只能赶一头牛,现给出赶一头牛花的时间和牛每分钟吃的花的数量,求最少牛会吃掉多少花?处理起来也比较容易,关键找到赶牛的顺序,所以排序是关键。其实利用sort函数就挺好的,写一个cmp,里面比较的就是按照a牛单位时间吃的花与赶b牛的时间乘积与b牛单位时间吃的花与赶a牛的时间乘积,选其较小者。然后统原创 2017-01-03 11:06:10 · 622 阅读 · 0 评论 -
POJ2376——Cleaning Shifts(贪心)
题目链接 此题就是给你一堆小区间,然后用尽量小的小区间数目填满大区间,输出最小值,如果填不满输出-1,。通常做法就是排序,再贪心最大的区间右边界。但是还有一种做法,是在Discuss里看见一个大神写的一段无排序的精简代码,想法也和贪心方式差不多,精妙之处就是拿了一整段空间来保存每个可用空间,然后用了一个“指针”now来标记当前状态,接着用pre和to去表示区间的起始和终止位置。原创 2016-11-28 16:12:49 · 420 阅读 · 0 评论 -
hihocoder 1436——GeoHash一·编码解码(Geohash)
题目链接 这道题是Geohash得模板题,至于什么是Geohash,网上不管是博客,还是维基百科,解释都够详细了,当然还有这道题的提示里也解释的很详细了(比较推荐看题目里的解释,不但详细,还有伪码模板),大致就是用经纬度描述地点时,将经纬度通过二分转化为为二进制编码,然后按先经度后维度,再经度再维度........的顺序将两二进制编码合并,接着每5位给出其对应的十进制数,再通过原创 2016-11-28 14:02:30 · 2352 阅读 · 1 评论 -
AOJ0525——Osenbei(DFS)
题目链接 题目大致是讲一个烧饼铺烤烧饼,在一个n X m (1<=n<=10,1<=m<=10000)的烤桌上面摆着一堆烧饼,数字1表示烧饼正面,0表示烧饼反面。然后你每次可以将一整行或者一整列的烧饼翻面,即正面翻成反面或者反面翻成正面。但是必须是一整列或者一整行的翻,问最多可以使都少烧饼翻成正面?题意还是很好懂的。由于n比较小,所以可以对行DFS,那列呢?其实列很好处理,对原创 2016-11-25 19:48:27 · 941 阅读 · 0 评论 -
POJ3187——Backward Digit Sums(暴力)
题目链接 这题没什么特别要注意的,直接next_permutation(),暴力走起。#include#include#include#include#includeusing namespace std;int a[15]={0};int b[15]={0};int main(){ //freopen("in.in","r",st原创 2016-11-25 15:20:07 · 336 阅读 · 0 评论 -
POJ2718——Smallest Difference(暴力瞎搞)
题目链接 按从小到大的顺序给你一些数字,不会重复,要求你把这些数字分成两类,每一类可以组成一个整数,要求两类整数绝对值之差最小。输出最小差值。笔者表示并不会优化~~~大致看了一下,最恶心情况下,也就是给了10个数,然后暴力需要约400万次,所以就直接暴力瞎搞了,用了一个牛逼哄哄的函数next_permutation(),并且注意只给了两个数的情况单独写一下,和暴力过程中的前导零原创 2016-11-25 14:32:34 · 426 阅读 · 0 评论 -
POJ3669——Meteor Shower(BFS)
题目链接 此题的意思让我难受,因为描述的很不清晰,而且数据也有问题,首先大致题意就是在一个地方会陨落流星,然后陨落的地方在坐标系的第一象限,当陨石砸中一个点,其不但会破坏被砸中点,还会破坏以被砸中点为中心的上下左右一共5个点,且它们砸落的时间不一,题目的输入就是第一行给定要砸多少陨石,然后接下来就是描述陨石砸落坐标和砸落时间,然后你会从坐标原点出发去寻找一个陨石砸不到的位置,你所原创 2016-11-24 19:26:11 · 446 阅读 · 0 评论 -
POJ1017——Packets(贪心)
题目链接 一道很简单贪心,结果被自己做蠢了。题目要求有6种不同规格的箱子,分别是1*1,2*2,3*3,4*4,5*5,6*6。要对这6种规格的箱子打包,但是包裹的规格只有6*6的。所以问你如何用尽量少的包裹打包,输出包裹数。我的做法就是老老实实的模拟,先装6*6的,每个包裹只能装一个6*6,再装5*5,一个包裹只能装一个5*5和11个1*1,再是4*4。。。就这样一直模拟下去原创 2016-12-05 10:48:48 · 515 阅读 · 0 评论 -
AOJ0121——Seven Puzzle(BFS)
题目链接 话说鄙人做这道题都有种把翔都做出来的感觉,主要是死在对string(一个自己不是很懂的东西)的不了解。然后一直在调bug,题意就是给你一个8宫格,然后0表示空缺,可以将相邻位的数字与空缺交换,以表示将该数字块移到空缺,然后会给你多组输入,每一组表示按从左到右,从上到下排列的8个数,问将这样排列的8个数移成01234567,最少移动多少步。输入有多组。先开始老老实实按题意原创 2016-11-22 21:48:41 · 574 阅读 · 0 评论 -
POJ2393——Yogurt factory(贪心)
题目链接 蛮水的一个贪心,维护当前最优价格就好,可以把储藏时间看做额外加价的次数,每过一周都在最优价上加一次储藏价,然后不断更新最优价即可,注意数据开long long。#include#include#include#include#includeusing namespace std;int main(){ long long n,原创 2016-12-04 11:52:26 · 515 阅读 · 0 评论 -
AOJ0033——Ball(贪心)
题目链接 其实要把该题归为贪心,也不知道是否是对的。。。题目就是有10个球,分别标号为1~10,但是顺序不知,从A管口放下,然后你可以控制当前放下的求进入B管或者C管,如果能使10个球放完,B和C管中的球的标号重下到上依次递增就输出YES,否则NO。看了网上好多说法,有DFS的,还有二进制的,,,搞得我有点慌,因为我自己也看到不是太懂,而本题实际上也很简单,放入当前球时原创 2016-11-18 16:26:44 · 749 阅读 · 0 评论 -
POJ3176——Cow Bowling(水DP)
题目链接 开始做DP的我表示要尊重每道水题(其实是只会水题。。。)这道题就是要找一条能从三角形定点到最底边的一条路径,方法是从底边开始往上找,一直取当前节点可达的最大值,最后找到定点即可,方法上模拟了背包问题的数组一维化处理,但是空间消耗还是大大滴(1700K)。。而且时间也跑了76ms。很想知道那些0ms跑出来的大神是如何做到的。#include#inc原创 2017-01-04 14:25:40 · 357 阅读 · 0 评论 -
HDU1114——Piggy-Bank(装满的完全背包)
题目链接 这道题是一道完全背包练手很好的题,比较容易,但是与纯的完全背包相比却做了部分很巧的改动。其一,这是一个要求装满的完全背包。其二,这个背包求得并不是最大值,而是最小值。那么如何解决这些变动呢?首先是看求最小值,这个好处理,那就是把max( )改成min( )就好了,但求最小值影响的却不只是函数的变化,还影响了对装满背包的处理。 我们知道,无论是01背包还原创 2017-01-05 10:15:52 · 548 阅读 · 0 评论 -
蓝桥基础练习——十六进制转十进制
问题描述: 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入 FFFF样例输出 65535 大水题。。。还以为一次就可以过的,然后就。。。没然后了,,关键的坑就是取值范围,蓝桥的题给的范围测试时一定会取到顶,而这次给的数据必须用long long...原创 2016-03-07 19:37:40 · 424 阅读 · 0 评论 -
POJ2392——Space Elevator(DP)
题目链接 这道题的意思是给定每一块建材的高度和数目,以及其能堆叠的高度上限,求最高能叠多高,这道题和poj上的一道名字是coins的题目比较相似,我用了同样的DP策略,也就是dp[i][j]表示第i种建材块在构成高度为j时能最少能剩下多少块。那么: ①当dp[i-1][j]>=0,也就是当前高度之前的木块就能达到,第种就能全留不用原创 2017-02-09 17:28:41 · 503 阅读 · 0 评论 -
ZSTUOJ3698——单调序列2
题目链接 这题和POJ3666是一样的题目,只是数据范围扩大了,从2000扩大到了5000,做法和POJ3666是一样的,只需扩展数组大小即可,所以就不赘述了,全当我极不负责的水了一篇博客好了。。。,POJ3666的解释可以看这里。#include#include#include#include#includeusing namespace s原创 2017-01-17 15:47:51 · 399 阅读 · 0 评论 -
POJ3666——Making the Grade(动态规划)
题目链接 这题反正我是觉得用DP做有点恶心,看别人的题解做的,转移方程是:dp[i][j]表示前i个元素的最后一个元素为全部元素第j小时的最小代价,则dp[i][j]=min(dp[i-1][k])+abs(s[i]-cop[j]), ( 0≤i<n ,0≤j , 0≤k )从这个式子来看应该是有三重循环的,但有为大牛很巧妙的省掉了k的循环,从而降低了时间复杂度,然原创 2017-01-17 15:40:00 · 988 阅读 · 1 评论 -
HDU1069——Monkey and Banana(动态规划)
题目链接 题目要求找最高能叠的箱子的高度,其实就是按照求LIS的方式来求即可,只是此处的最长按照箱子的高度做参数,然后一个箱子能叠在另一个箱子上的前提是处在下面的箱子长和宽都比上面的箱子要大,不能相等,输入时分类一下再处理输入数组,然后按照长或者宽的顺序sort一下,再对另一个参数进行dp即可。#include#include#include#in原创 2017-01-16 15:40:03 · 408 阅读 · 0 评论 -
POJ1631——Bridging signals(动态规划)
题目链接 真的很想说这道题读懂题意比解决题目本身要难。。。然而题目本身的意思又很简单就是求最长递增子序列。但这道题有点特殊的地方就是要优化,常规的两个for的方法会超时,然后在《挑战程序设计竞赛》这本书上给了另一个nlogn的方法——就是定义dp[i]:=长度为i+1的上升子序列中末尾元素的最小值(不存在的话就是INF),初始化对dp[]数组全部赋值成INF,也就是+∞,然后对原创 2017-01-15 19:38:58 · 731 阅读 · 0 评论 -
POJ1065——Wooden Sticks(贪心)
题目链接 题目大意很好懂,给一连串数对,只要后一个数对的两个值比前一个数对两个值都大,那么该数对不消耗时间,否则消耗1单位时间。求如何安排数对顺序使得耗时最少。这题是贪心,先按L从小到大排序,然后对w进行贪心,其思想上和以前一道导弹拦截的题目几乎一模一样(题解链接),用vector存当前需要另外加工的w值,然后对每次更新均对vector进行搜索,找出与当前w差值最小且比其小的w原创 2017-01-15 11:37:10 · 597 阅读 · 0 评论 -
POJ3280——Cheapest Palindrome(动态规划)
题目链接 题目意思挺好懂的,就是说给你一个字符串,要求添加或删除若干的字符使得其成为回文串。给出每个字符添加和删除的代价,求出代价最小值。简单的DP,方程为:dp[i][j]=min(dp[i][j-1]+Map[s[j]-'a'],dp[i+1][j]+Map[s[i]-'a']);dp[i][j]表示第i个字符到第j个字符的最小代价,Map[s[i]-'a']表示删除或添加原创 2017-01-09 10:55:08 · 367 阅读 · 0 评论 -
POJ3616——Milking Time(动态规划)
题目链接 这道题感觉有点像任务调度,(由于智商感人)还是看别人的题解做的。题目要求获得更多的牛奶,但区间又不能重叠,所以状态转移函数dp[i]=max(dp[i],dp[j]+s[i].product),(j表示在i之前的且与第i个区间不重合的区间),dp[i]表示第i个区间能获得的最大产量。其中第i个并不是题目给出的第i个区间,而是按照结束时间排好序的第i个区间。看一下代码还原创 2017-01-07 17:09:17 · 489 阅读 · 0 评论 -
POJ2385——Apple Catching(动态规划)
题目链接 这道题听说是很水的DP入门题。然而,我连入门题都不会。看别人的题解弄的,关键点就是要抽象出问题的状态转移,其状态转移方程为 dp[i][j] = max(dp[i-1][j] , dp[i-1][j-1])。其中dp[i][j] 表示的是 第i秒 第j跳 最多能吃多少苹果,这个看似很简单的方程我都理解了很久,其实主要的是没把别人的代码看完,这个方程是不完整的,还差原创 2017-01-06 20:28:46 · 651 阅读 · 1 评论 -
HDU1257——最少拦截系统(贪心)
题目链接 在kuangbin的DP专题里找到的,然而有点坑的是并不是用DP做的。。。此题用贪心才是正解啊~~,对于每一发导弹,若已经存在拦截系统,且可以拦截此导弹,那么重新开一台是没意义的,因为达到的效果和通过降低现有拦截系统高度来拦截所达到的效果是一样的,当然若拦截不了那就另当别论去开一台,问题是有多台可以降低高度那么选哪一台呢?答案当然是选高度最低的且能拦截此导弹的系统原创 2017-01-06 16:01:32 · 376 阅读 · 0 评论 -
AOJ0558——Cheese(BFS)
题目链接 题目大致是想说有一只生物想吃cheese,然后有n个工厂生产cheese(1,且每个工厂生产起司的消耗量均不一样,刚好有n个工厂,而这只生物只能吃消耗量小于或等于它自己体力的cheese且它在每个工厂吃且只吃一次,其初始体力为1,问从出发点是S开始,如何在最少的步数内吃到所有的cheese,当然,移动方式就是上下左右。题目意思已经很明确了,就是图上的'X'表示障碍物不原创 2016-11-21 14:19:06 · 705 阅读 · 0 评论 -
POJ3190——Stall Reservations(贪心)
题目链接 题目大致是说有一群奶牛要挤牛奶,但是她们只在规定的时间区间内挤牛奶,而且一台挤奶机只能给一头牛挤牛奶,问最少需要几台挤奶机才能给全部的牛挤牛奶,并且输出每头牛是在第几台挤奶机挤的牛奶,第一行输入奶牛数,然后按顺序输入每头奶牛的挤牛奶时间区间。输出则是第一行输出最少的挤奶机数。然后一次输出每头奶牛是在第几台挤奶机挤的奶。首先对挤牛奶区间sort一下,优先按区间左端点从小原创 2016-12-03 14:21:34 · 400 阅读 · 0 评论 -
HDU5478——Can you find it(快速幂)
题目链接 此题的大意是给你一个式子a k1⋅n+b1 + b k2⋅n−k2+1 = 0 (mod C)(n = 1, 2, 3, ...).,(1≤a,bC).要求求出这样一对整数对(a,b)使得对任意的n使此等式成立,并将(a,b)按字典序输出,如果没有满足要求的这样的整数对,就输出-1. 这道题是一道快速幂的题目但结合原创 2016-07-16 19:17:19 · 515 阅读 · 0 评论 -
HDU1521——排列组合(指数型母函数)
题目链接: 最近一直在做组合数学的东西,也转载了部分大牛的博客,这道题若有不是很理解的地方,也可看我最近转载的有关母函数的博客。这道题是一道标准的母函数裸题,直接套用母函数的公式即可原创 2016-07-25 19:53:55 · 427 阅读 · 0 评论 -
指数型母函数 简介
原文链接:http://www.wutianqi.com/?p=2644母函数分:普通型母函数,指数型母函数。普通型母函数主要是来求组合的方案数,而指数型母函数是求多重排列数。关于普通型母函数的讲解,以前写过:http://www.wutianqi.com/?p=596而指数型母函数主要是关于排列组合方面的问题。分别看两个比较典型的问题对比:普通母函数问题:有红转载 2016-07-25 19:46:33 · 573 阅读 · 0 评论 -
整数划分 --- 一个老生长谈的问题 动态规划
原文链接:http://www.cnblogs.com/xiaoxian1369/archive/2011/09/12/2174212.html1) 练练组合数学能力. 2) 练练递归思想 3) 练练DP 总之是一道经典的不能再经典的题目: 这道好题求: 1. 将n划分成若干正整数之和的划分数。 2. 将n划分成k个正整数之和的划分数。 3.转载 2016-07-25 15:50:03 · 554 阅读 · 0 评论 -
母函数(Generating function)详解 — TankyWoo
原文链接:http://www.wutianqi.com/?p=596在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数转载 2016-07-25 14:14:22 · 310 阅读 · 0 评论 -
POJ1492——Paths on a Grid(组合数公式)
题目链接 题目意思其实就是求C(n+m,s),(s=min{m,n}).对于这种题,我也是第一次见到。意思如此直接,就是求组合数,但给定的组合数有很大,32位,所以利用杨辉三角递推是做梦了,看了别人的想法,居然是直接用组合数公式: C(n,m) = n原创 2016-07-22 20:05:48 · 670 阅读 · 0 评论 -
POJ1365——Prime Land(素数筛选加暴力)
题目链接 这是一道素数的水题,唯一的难点就是理解题意,大致是说给你一列数,a1,a2,a3,a4,a5,a6,.......然后按(a1^a2)*(a3^a4)*(a5^a6).......得到一个和值sum,然后把sum-1,再按(a1^a2)*(a3^a4)*(a5^a6).......的格式对sum-1分解质因式,比如样例中的5 1 2 1,就得到sum=5^1+2^1=10,然原创 2016-04-29 10:47:44 · 794 阅读 · 0 评论 -
HDU1217——Arbitrage(Floyd)
题目链接: 这道题啊~~~,再参考过网上其他的一些博客后发现就是一道披着各种“外皮”的最短(chang)路径,题意很简单,就是给定一定种类数的货币,以及各种货币间的汇率,问能不能通过货币间的兑换盈利,无论那一种货币只要能盈利就输出......Yes,否则输出......No,这里可以将各个货币模拟成一个图上的点,汇率模拟成点与点间路径的权值,要求获利就是存在路径回路径大于1。我们也原创 2016-03-26 12:38:14 · 451 阅读 · 0 评论 -
HdU2680——Choose the best route(单源最短路Bell man-ford)
题目链接题目大意简述: “Kiki”要去看她的friend,从她家到她朋友家有很多公交站,所以也有很多路线,每段路花费时间不同,要求求耗时最短的坐车方式,输出最短时间,若无法到达,输出-1。注意理解题意,输入数据多组,第一行的三个数据分别是公交站数,路线数,和到达她朋友的公交站点号,然后是各路线的输入。注意!同样的两个站点可能有多条路径,路径输入完后输入Kiki的起始公原创 2016-03-21 18:29:49 · 618 阅读 · 0 评论 -
HDU2149——Public Sale(Bash Game巴什博奕)
题目链接 此题为巴什博奕裸题,若是不太清楚什么是巴什博奕,可以看此处另外一道有关巴什博奕的入门题,我在其中有介绍巴什博奕,此题就是要求输出先手是否能获胜,如果能,输出第一次要价的数值,不能就输出none,然后注意一下当M 源码如下:#include#include#includeusing namespace std;int main(){原创 2016-03-31 19:58:14 · 430 阅读 · 0 评论 -
HDU5475——An easy problem(线段树or暴力)
题目链接 题目意思很好理解,给定若干操作Q,给定一个模值M,操作分两种,1 和 2,给定一运算值并赋初值为1,当操作数为1时,运算值乘以操作数1后的数。当操作数为2时,运算值除以第n步的值,其中n为操作数2后的数,每次运算出的结果都要对M取模并输出。刚开始做时,由于考虑到要取模,所以第一反应是逆元,但忽略了M不一定与运算值互质导致没有逆元这一因素而W了。看了多数人的做法都是线原创 2016-07-18 16:37:13 · 908 阅读 · 0 评论 -
nefu2——猜想(素数筛法)
题目链接 这道题并没有难度,就是一道裸素数筛法,但我还是被恶心到了,因为报MLE了,还是队友的一句提醒,存放判断值的数组vis用bool比int少4倍。。。我才顿悟,,,基础不行遭天谴啊~~~#include#include#include#include#includeusing namespace std;#define MAXN 2000000原创 2016-07-29 15:55:52 · 370 阅读 · 0 评论 -
AOJ0118——Property Distribution(DFS)
题目链接 题目意思就是会给你一个矩阵(最多 100 X 100),然后里面会有三类字符'@', '#', '*', 相邻的(即上下左右)且相同的字符算在一个连通块内,问总共有多少个这样的连通块?裸的DFS,对每种字符用一次DFS再统计总块数即可。#include#include#include#include#includeusing namesp原创 2016-11-18 14:38:07 · 422 阅读 · 0 评论