自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 uva1368

题目大意: 给m个长度为n的DNA序列,求一个DNA序列到所有序列的总汉明距离最小,汉明距离为不同字符的位置的个数。思路: 用贪心的方法,刚开始还以为是在给定的DNA中选出一个,可是并不是,是要求一个DNA序列可以使得它到给定的DNA序列的距离最小。每次都求出一列中最多相同的字母。代码:#include <iostream>using namespace std;#include <cstr

2016-01-31 13:37:05 1995

原创 uva10970

题目大意: 求将巧克力切成1*1的最少刀数。代码:#include <stdio.h>int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF) { printf("%d\n",(n - 1) + n * (m - 1)); }}

2016-01-29 14:54:36 306

原创 LA3213

题目大意: 找到一个映射 使得两个字符串相同如果可以找到输出YES,反之输出NO思路: 刚开始以为一定要按顺序一一对应,发现第一组数据答案是错的,后来才知道不一定要按照顺序。 那么只需要计算每个字母的个数,比较字母个数是否一样如果全部一样就可以找得到映射。代码:#include <iostream>using namespace std;#include <stdio.h>#include

2016-01-29 14:47:10 310

原创 uva11636

题目大意: 经过复制/粘贴可以变成原来的两倍,求最小复制/粘贴次数。思路: 很简单的贪心,就假设每次都复制/粘贴全部代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int main() { int n; int cases = 1; while(scanf("

2016-01-29 14:15:22 470

原创 uva11039

题目大意: 求正负交错且绝对值递增的最长序列思路: 本来想说分成两个正负数组,然后有点类似归并排序的那种思想,可是发现好混乱。 后来看见人家是做标记的。。。太简单了。。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <algorithm>int a[50000

2016-01-29 14:10:00 445

原创 LA3983

题目大意: 有n个垃圾,分别有它的坐标和重量,有一个及其热,要按照编号从小到大的顺序捡起所有垃圾并且扔进垃圾桶,垃圾桶位于原点。机器人可以捡起几个垃圾以后一起扔掉,但是它手中的垃圾总重量不能超过最大载重C。两点间的距离为横坐标之差的绝对值加上纵坐标之差的绝对值。求机器人走的最短距离。思路: 单调队列优化DP。 dp[i] = dp[j] + dis[j + 1] +dist[i] - dist

2016-01-29 13:40:26 375

原创 uva10859

题目大意: 这题教会了我一个很有用的技巧:有两个所求的值要优化,比如让a尽量小,b也尽量小那么可以转化为让x = M*a+b尽量小,其中M应该是一个比“a的最大值和b的最小值之差”还要大的数最终的答案为a = ans/M, b = ans%M回到这题,要求放的灯总数最小,被两盏灯同时照亮的边数尽量大。因为每条边要么被一盏灯照亮,要么被两盏灯照亮,所以可以转换为:求:放的灯总数量最少,被一盏灯照亮的

2016-01-28 20:45:05 497

原创 uva10891

题目大意: 博弈,求A-B的得分的最大值。思路: 区间DP; 让B尽量小。 sum = A + B ;A - B = A-(sum - A) = 2 * A - sum A = sum - min(B);代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>const int ma

2016-01-28 17:07:44 604

原创 LA3882

题目大意: 从第m个开始删除,每隔k个就删除一个,求最后一个留下的。思路: 假设从0开始删除,那么没隔k个删除一个的话 f数组存的是最后留下的数字编号。 则f(1) = 0,f(n) = (f(n - 1) + k)%n 因为删除的人的后一个的编号变成了0 最后胜利的人不断+k就可以还原为原来的编号。 不过该题要求编号从1开始,只要把f[n]+1即可,同时,该题指定了第一个要删除的人必

2016-01-28 15:26:03 573

原创 uva10755

题目大意: 求三维矩阵的和最大的子矩阵。思路: 和某一题求最大和的很像,只不过这一题是三维的,那一题是二维的。通过枚举开始结束的行列和层数进行降维。代码:#include <iostream>using namespace std;#include <cstring>#include <algorithm>#include <stdio.h>const int maxn = 30;co

2016-01-28 14:16:54 583

原创 LA3695

题目大意: 求出一个矩形可以包含的最多的星星的数量。思路: 用left数组存位于i左边的上下边界的数量,on数组存不包括上下边界的竖线上包含几个星星,用on2数组存包括上下边界的竖线上包含几个星星。边界上的星星数量就是left[j] - left[i] + on2[j]+on[i]。枚举上下边界,用一个循环求on[i] - left[i]的最大值+上left[j]+on2[j] 相当于枚举左右边

2016-01-28 11:39:13 409

原创 LA3905

题目大意: 给你一个矩形照相机和n个流星的初始位置和速度,求能找到流星最多的时刻,边界上的点不算入内。思路: 线性扫描 + 事件点处理 可以以时间为轴,计算每个流星出现的时间然后化成平行于x轴的线段,用一根竖线进行扫描,扫描到最多的时刻记录下来每次更新。代码:#include <iostream>using namespace std;#include <stdio.h>#include

2016-01-27 11:38:00 298

原创 uva10066

题目大意: 从前从前在古帝国有2座高塔位于2座城市中,他们的形状不太相同。但是他们都是用圆柱形的石块一个堆在另一个上面建起来的。每个圆柱形石块的高度都相同(定为1),但是半径却不一。所以,虽然2座高塔的形状不一样,但事实上他们可能有许多石块是相同的。在高塔建成的一千年后,国王要求建筑师拿掉高塔的某些石块,使得2座高塔的形状大小和高度一样。但同时要尽可 能让高塔的高度越高越好。新高塔的石块的顺序也必

2016-01-25 17:46:23 344

原创 uva10131

题目大意:给出n只大象的属性, 包括重量w, 智商s, 现在要求找到一个连续的序列, 要求每只大象的重量比前一只的大, 智商却要小, 输出最长值和方案, 方案不唯一的时候任意输出一种。思路: 将重量从小到大进行排序,按智商大到小最一个最长递增子序列 代码:#include <iostream>using namespace std;#include <cstring>#include <st

2016-01-25 17:18:32 252

转载 最大子序列、最长递增子序列、最长公共子串、最长公共子序列、

最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序列。代

2016-01-25 16:44:27 248

原创 uva116

题目大意: 找出花费最少的路径,一个格子可以往它上一行的后一个格子,本行的后一个格子和下一行的后一个格子走。思路: 要求字典序最小,而且花费最少,逆向可以保证字典序最小。 要保证字典序最小需要注意if顺序 因此WA了一次。 代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int

2016-01-25 16:09:08 600

原创 LA3029

题目大意: 求空地F的最大矩形,求最大子矩阵思路: 用三个数组up,l,r分别表示举行的高度,左边界,右边界。 lo 表示左边最近障碍格的列编号。 ro表示右边最近障碍格的列编号。 先从左到右维护左边界。 如果是有障碍的话 那么up [i][j] = 0,l[i][j] = 0,lo = j; 当i是第一行的时候 如果没有障碍的话 那么up[i][j] = 1,l[i][j] = l

2016-01-25 15:17:49 328

原创 LA2678

题目大意: 求大于S的最短连续子序列的长度代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int A[100005];int B[100005];int main() { int n,S; while(~scanf("%d %d",&n,&S)) {

2016-01-25 11:50:04 362

原创 uva11549

题目大意: 一个损坏的计算机,只能显示n位,现在你用一个数K不断的平方,只能保留最高n位,求最大的那个数是多少。 思路: 数字的出现会出现循环的情况,每次记录下最大的数,当出现循环就退出,输出最大的数,用STL中的set判断是否出现重复的数字。代码:#include <iostream>using namespace std;#include <cstring>#include <std

2016-01-24 15:05:58 535

原创 uva11078

题目大意: 求A[i]-A[j]的最大值,i#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int A[100005];int main() { int T,n,maxx; scanf("%d",&T); while(T--) { memset(A,

2016-01-24 14:30:07 309

原创 uva11462

题目大意: 给定很多个居民的年龄。把他们按照从小到大排序输出思路: 有内存限制不可以用快速排序,用计数排序的方法。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int readint() { char c = getchar(); while(!isdigit(c)

2016-01-23 17:57:56 362

原创 LA3902

题目大意: n台机器连成一个树状网络,其中叶节点是客户端,其他结点是服务器。目前有一台服务器正在提供VOD服务,虽然视频本身质量不错,但对于那些离它很远的客户端来说,网络延迟却难以忍受。你的任务是在一些其他服务器上也安装同样的服务,使得每台客户端到最近服务器的距离不超过一个给定的整数k。为了节约成本,安装服务的服务器台数应尽量少。 思路:分析:把无根树变成有根树会有助于解题。本题中已经有了一个天

2016-01-23 17:36:30 457

原创 uva11520

题目大意: 填充.的位置,使得与它上下左右的都不一样,而且填充完的字符串连起来要在字典序中最小。思路: 直接暴力枚举出26个字母可以填入哪个,因为是从A-Z所以肯定可以保证其在字典序中最小。(从左往右,从上往下)代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>int n;char

2016-01-23 15:28:53 391

原创 uvaLive3635

题目大意: 分pie给小朋友,有N个派,F+1个小朋友,求每个小朋友可以分到的最大的派,派不可以是拼凑起来的。思路: 由于受到了上一题(组装电脑)的影响,所以这一题看起来感觉类似,也想着用二分做,二分出每个小孩子可以分到的派的大小,然后判断这个大小是否可行。只需将每个派的面积处以这个大小,所有的值加起来看是否大于F+1。代码:#include <iostream>using namespace

2016-01-23 14:59:57 507

原创 uva10003

题目大意: 有一根长度为l的木棍,木棍上面有m个切割点,每一次切割都要付出当前木棍长度的代价,问怎样切割有最小代价。思路: 第一次做区间dp的问题,学到了很多,有点类似分治法的样子。 枚举区间长度,区间起点,分成两个区间的那个点,找出最小的。然后不断的递推。代码:#include <iostream>using namespace std;#include <cstring>#incl

2016-01-22 17:30:38 501 1

转载 定义区间DP

区间动态规划问题一般都是考虑,对于每段区间,他们的最优值都是由几段更小区间的最优值得到,是分治思想的一种应用,将一个区间问题不断划分为更小的区间直至一个元素组成的区间,枚举他们的组合 ,求合并后的最优值。 设F[i,j](1<=i<=j<=n)表示区间[i,j]内的数字相加的最小代价 最小区间F[i,i]=0(一个数字无法合并,∴代价为0)每次用变量k(i<=k<=j-1)将区间分为[i,k]和

2016-01-22 16:46:16 221

原创 uva12124

题目大意: 组装一台电脑,每个配件都需要买一个,总价格不可以超过b,且品质最差配件的品质因子要尽量的大。思路: 最小值最大化的问题,用二分法,二分法分的是最低的品质因子的范围,判断函数写的是所有的品质因子大于k的时候是否可以组装成电脑,如果可以的话就继续往品质因子大的取,如果不行就要往小的取。代码:#include <iostream>using namespace std;#include

2016-01-22 16:24:35 536

原创 uva11210

题目大意: 求出所有可以听的牌思路: 暴力枚举,回溯代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>const char *mj[] = { "1T", "2T", "3T", "4T", "5T", "6T", "7T", "8T", "9T", "1S", "

2016-01-22 15:34:07 494

原创 uva10795

题目大意: 汉诺塔。移动最少步数到达目标状态,大的一定要在小的下面,不能压在小的上面。思路: 首先,考虑需要移动的编号为K最大的盘子。将K-1的盘子移动到不是目标也不是起始的那根柱子上,成为参考局面。 让起始状态和目标状态都变成参考局面,然后步数就是两者相加再加1,加1是由于还要把第K个盘子移到目标柱子上。 中转的柱子编号为6 - start - finish,6是由于1+2+3 = 6。

2016-01-21 23:04:28 686

原创 uva11384

题目: 用最少的操作数使得所有数字都变成0。操作:选择所有或者几个整数同时减去一个正整数。思路: 利用递归的方法。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int f(int n) { return (n == 1 ? 1 : f(n/2)+1);}int main

2016-01-21 18:13:52 548

原创 uva1352

题目大意: 改变最少面的颜色,使得所有立方体完全相同(存在一种旋转的方式,使得两个立方体对应面的颜色相同)暴力。。看了题解还WA了N发才过的 只因为24中姿态其中的有的写错了。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>#include <vector>#include <al

2016-01-21 18:03:05 321

原创 uva11464

题目大意: 给出一个矩阵,说明使用最少的改变(把0变成1)使得矩阵中的每一个数的前后左右加起来都是偶数。思路: 枚举第一行,推出第二行第三行。。。代码:#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#define INF 10000000int grid[20][20];int t

2016-01-21 15:26:54 780

原创 uva1388

题目大意: 在一个周长为10000的圆上等距离的分配雕塑的位置,现在要插入m个雕塑,求最短移动距离可以使得插入后的雕塑的位置仍然是等距离的。思路: 求出原来的距离d0,求出插入后的距离d1,利用循环,d= i*d0知道每一个在原来的坐标系上的坐标,然后利用a = floor(d/d1),t = a * d1知道现在要插入的位置在哪,相减就是距离。代码:#include <iostream>u

2016-01-21 11:54:49 378

原创 uva10881

题目大意: 给出一根长为L的木棍,让蚂蚁在上面爬,给出蚂蚁的初始位置和走的方向,两只蚂蚁若相遇就往相反方向走,求T时间后蚂蚁的位置。思路: 这题跟某一题也是蚂蚁的很相似,只是另外一题求的是最短时间最长时间之类的。蚂蚁相遇后反向其实等价于没有掉头,继续往前走,只是这时候不是同一只蚂蚁在走了而已,这一题蚂蚁的顺序是最开始从左到右的蚂蚁,到最后位置也是从左到右排序的。那么就可以利用这一特性做题目。代码

2016-01-21 11:05:24 533

原创 文章标题

题目大意: 给出一个数字,可以用五种面值的钱币拼成,可以有多少种方法。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int coin[5] = {1,5,10,25,50};long long dp[8000];int main() { int n;// memset(d

2016-01-02 20:59:44 191

原创 uva10827

题目大意: uva108的升华,此时是可以缠绕的。第一行可以变成最后一行,最后一行也可以变成第一行,第一列可以变成最后一列,最后一列也可以变成第一列。思路:将四个矩阵拼接在一起那么就可以枚举出可能了。代码:#include <iostream>using namespace std;#include <cstring>#include <stdio.h>int a[200][200],sum

2016-01-02 19:02:32 552

原创 uva108

题目大意: 在给出的矩阵当中,找出一个子矩形矩阵可以使得里面加起来的值是所有子矩阵中最大的。思路: 将num数组初始化为一个把在自己的行数之前的同一列的值都加起来的一个数组。那么num[i][j] 表示的就是一个<=i行 且第j列的值都加起来的一个值。用三层for,枚举出两个矩形的起始行号,以及列数。这样那个就可以枚举出所有的可能。代码:#include <iostream>using nam

2016-01-02 19:00:35 405

空空如也

空空如也

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

TA关注的人

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