自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 POJ1789 Truck History

用一个7位的string代表一个编号,两个编号之间的距离代表这两个编号之间不同字母的个数。一个编号只能由另一个编号“衍生”出来,代价是这两个编号之间相应的距离,现在要找出一个“衍生”方案,使得总代价最小。N´4个编号:´aaaaaaa´baaaaaa´abaaaaa´aabaaaa    后三个均由第一个衍生可得到最小距离和1+1+1=3.1.

2017-01-24 11:04:40 195

原创 洛谷P1880 石子合并

#include#include#define inf 99999999using namespace std;int n,s[201],dpmax[202][202],dpmin[202][202];int main(){ scanf("%d",&n); for (int i=1; i<=n; i++) scanf("%d",&s[i]); for (int i=1; i<

2017-01-22 20:58:06 229

原创 洛谷P1541 乌龟棋

首先想到状态:f[x][a][b][c][d],表示已用a张一步卡、b张两步卡、c张三步卡、d张四步卡、走到第x格的最大得分。但五维dp容易超空间又容易超时,所以试着对状态进行优化。我们发现,x用于计算每格的得分;而已知a, b, c, d时,x可求得,所以可以省掉第一维状态。 x = 1+ 1*a + 2*b + 3*c + 4*d (注意此处的1)状态:f[a][b][c][d]

2017-01-22 20:26:39 349

原创 洛谷P2066 机器分配

(一)此题数据范围很小,所以可用搜索。用b数组记录每次的路径,最后到达终点并比较,如果结果更大,则用c数组更新路径。#include#includeusing namespace std;int n,m,a[20][20],ans,b[20],c[20];void dfs(int x,int y,int z) { if (x == n+1) { if (z

2017-01-21 19:58:30 298

原创 洛谷P1854 橱窗布置

1.此题的数据中有负数,所以dp数组的初始化为-inf!2.用book数组存储路径,用递归来回溯路径。(book[x][y]表示第x轮、选到第y个花瓶时最大方案的前一个点)f[x][y]:前x束花、前y个花瓶的最大美学值初始化:f[0][0~v] = 0状态转移方程:f[i][j] = f[i-1][k] + a[i][j]       (i-1 #includ

2017-01-21 19:18:08 237

原创 洛谷P1308 统计单词数

基本思路:1.读入字符串2.转化大小写3.查找空格并提取字符串4.比较实现过程中需注意的细节:1.需用getline整行读入,因为cin读入到空格时会停止。注意:使用getline用键盘输入字符串末会有空格,但使用测试数据不会出现空格 2.为了方便提取最后一个单词,读入结束后在字符串最后添加一个空格3.使用两个变量作为指针,一个指向一个单词的第一个位置,一个

2017-01-18 20:21:21 4483

转载 【数据结构】双向链表的创建和读取

双向链表是为了满足更加方便的查找前驱,而付出空间的代价的一个数据结构。双向链表的节点定义如下:1 typedef struct node2 {3 int x;4 struct node *prior,*next;5 }DLNode;双向链表的空间结构如下图所示:双向链表的创建如下: 1 //创建双向链表 2 DLNode *create

2016-10-29 16:21:18 315

转载 深入理解二分查找(二、二分答案)

二分答案    如果已知候选答案的范围[min,max],有时候我们不必通过计算得到答案,只需在此范围内应用“二分”的过程,逐渐靠近答案(最后,得到答案)!一、何时可以使用“二分答案”    不是任何题目都适合使用“二分答案”的,我Sam观察到一般有以下的一些特征:    A. 候选答案必须是离散的 ,且已知答案的范围是:[最小值min, 最大值max] (

2016-10-26 12:45:30 2407 1

原创 洛谷P1006 传纸条

这是一道四维DP题,注意数组要开得恰好,不然会爆内存。(维数越高,每一维上的数字大1的空间代价就越大)因为有限制条件每个数只能访问一次,所以要判断两个人是否走到了同一个格,以及他们上一步是否在同一个格。如果两个人走到了同一个格,就跳过这次循环;如果两个人上一步在同一个格,就跳过这种情况,不再比较。动态转移方程:f[i][j][p][q] = max( f[i-1][j][p-1][q],

2016-10-23 18:13:05 942

转载 二分图最大匹配-匈牙利算法

二分图的定义:如果一个图的所有顶点可以被分为X和Y两个集合,并且所有边的两个顶点恰好一个属于集合X,另一个属于集合Y,即每个集合内的顶点没有边相连,那么此图就是二分图。增广路:增广路的本质就是一条路径的起点和终点都是未被配对的点。如果找到一条增广路,那么配对数将会加1.寻找一个点配对的基本思路:1.从点u开始,从点u引出的边中任意选一条边(u-v)开始配对。

2016-10-20 17:04:22 798

转载 图的割边(代码)

割边不需要讨论当前点是否是根节点的情况,因为是不是根节点对结果都无影响。只需要将割点代码中的low[node[x]]>=low[cur]改为low[node[x]]>low[cur]即可,因为如果有等号,node[x]还是可以通过非树边到达cur,此边就不是割边。割边判断的是node[x]是否可以通过非树边到达cur(cur并不删去),而割点判断的是是否可以通过非树边到达cur之前的点(cur

2016-10-20 15:02:01 371

转载 图的割点(代码)

用邻接链表来存储图,用flag数组来表示点的状态(是否为割点),最后输出割点。判断一个点是割点:1.当前节点不是根节点,且有一个儿子的low值大于等于它的num值。                                    2.当前节点是根节点,且至少有两个儿子。(儿子的low值不可能小于它的num)P.S.这是一个无向图,要将数组翻倍。#include#includ

2016-10-20 13:34:53 258

转载 UVa 136 Ugly Numbers

实现方法:从小到大生成各个丑数。(对于任意丑数x,2x、3x和5x都是丑数)每次要取队列中最小的数来生成后面的数(为了统计已生成的数的个数),但队列中的元素并不是按照大小顺序排列的,所以要用到优先队列:priority_queue, greater >。每一次用过x生成三个数之后就将x出队。注意:需要使用long long数据类型。#include#include#incl

2016-10-17 13:05:26 241

转载 UVa 540 Team Queue

定义两个队列: q,q2[maxn]q表示团队整体的队列,q2[x]表示团队x中队员的相对次序。#include#include#include#include#define maxt 1100using namespace std;map team; //team[x]表示编号为x的人所在的团队编号 int kase,t,n,x;char od[10];int

2016-10-16 20:26:12 213

转载 UVa 12096 The SetStack Computer

本题的集合并不是简单的整数集合或者字符串集合,而是集合的集合(一个比较抽象的问题)。为了方便起见,此处为每个不同的集合分配一个唯一的ID,则可以将集合的集合转化为int类型的集合。整个栈是一个stack。#include#include#include#include#include#include#include#define ALL(x) x.begin(),x.end()

2016-10-16 10:23:13 302

转载 UVa 156 Ananagrams

因为要字母重排,所以要把每一个单词标准化,即全部转化为小写字母后再进行排序。用map来统计标准化后的单词出现的次数,最后将值为1的单词加入到ans集合中。(标准化必须是动态的,不能改变原来的单词!)#include#include#include#include#include#include#includeusing namespace std;string s;ma

2016-10-15 23:28:26 220

转载 UVa 10815 Andy's First Dictionary

因为需要找出不同的单词,所以可以利用set的性质,即元素不重复并且是有序的(这样就不用再排序)。1.几个函数:isalpha()    判断字符是否是字母,如是,返回值为truetolower()    将字母转化为小写字母,如不是字母,则不作处理2.字符串流读入时会自动略过空格,所以如果只想提取单词可以将所有的标点符号都变成空格。3.set的常用函数:     set.inser

2016-10-15 22:59:09 201

转载 UVa 101 The Blocks Problem

首先每一个木块自成一堆,并分配一个编号。因为不确定每一个木块堆的高度,所以可以用vector来表示每一堆的木块编号。P.S. vector的常用操作:1. vec.push_back()     向尾部插入元素2. vec.size()    取数组元素个数3. vec.clear()    清空数组4.插入元素:    vec.insert(vec.b

2016-10-15 22:37:58 234

空空如也

空空如也

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

TA关注的人

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