- 博客(18)
- 收藏
- 关注
原创 POJ1789 Truck History
用一个7位的string代表一个编号,两个编号之间的距离代表这两个编号之间不同字母的个数。一个编号只能由另一个编号“衍生”出来,代价是这两个编号之间相应的距离,现在要找出一个“衍生”方案,使得总代价最小。N´4个编号:´aaaaaaa´baaaaaa´abaaaaa´aabaaaa 后三个均由第一个衍生可得到最小距离和1+1+1=3.1.
2017-01-24 11:04:40 225
原创 洛谷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 262
原创 洛谷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 393
原创 洛谷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 341
原创 洛谷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 270
原创 洛谷P1308 统计单词数
基本思路:1.读入字符串2.转化大小写3.查找空格并提取字符串4.比较实现过程中需注意的细节:1.需用getline整行读入,因为cin读入到空格时会停止。注意:使用getline用键盘输入字符串末会有空格,但使用测试数据不会出现空格 2.为了方便提取最后一个单词,读入结束后在字符串最后添加一个空格3.使用两个变量作为指针,一个指向一个单词的第一个位置,一个
2017-01-18 20:21:21 4553
转载 【数据结构】双向链表的创建和读取
双向链表是为了满足更加方便的查找前驱,而付出空间的代价的一个数据结构。双向链表的节点定义如下:1 typedef struct node2 {3 int x;4 struct node *prior,*next;5 }DLNode;双向链表的空间结构如下图所示:双向链表的创建如下: 1 //创建双向链表 2 DLNode *create
2016-10-29 16:21:18 338
转载 深入理解二分查找(二、二分答案)
二分答案 如果已知候选答案的范围[min,max],有时候我们不必通过计算得到答案,只需在此范围内应用“二分”的过程,逐渐靠近答案(最后,得到答案)!一、何时可以使用“二分答案” 不是任何题目都适合使用“二分答案”的,我Sam观察到一般有以下的一些特征: A. 候选答案必须是离散的 ,且已知答案的范围是:[最小值min, 最大值max] (
2016-10-26 12:45:30 2463 1
原创 洛谷P1006 传纸条
这是一道四维DP题,注意数组要开得恰好,不然会爆内存。(维数越高,每一维上的数字大1的空间代价就越大)因为有限制条件每个数只能访问一次,所以要判断两个人是否走到了同一个格,以及他们上一步是否在同一个格。如果两个人走到了同一个格,就跳过这次循环;如果两个人上一步在同一个格,就跳过这种情况,不再比较。动态转移方程:f[i][j][p][q] = max( f[i-1][j][p-1][q],
2016-10-23 18:13:05 985
转载 二分图最大匹配-匈牙利算法
二分图的定义:如果一个图的所有顶点可以被分为X和Y两个集合,并且所有边的两个顶点恰好一个属于集合X,另一个属于集合Y,即每个集合内的顶点没有边相连,那么此图就是二分图。增广路:增广路的本质就是一条路径的起点和终点都是未被配对的点。如果找到一条增广路,那么配对数将会加1.寻找一个点配对的基本思路:1.从点u开始,从点u引出的边中任意选一条边(u-v)开始配对。
2016-10-20 17:04:22 836
转载 图的割边(代码)
割边不需要讨论当前点是否是根节点的情况,因为是不是根节点对结果都无影响。只需要将割点代码中的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 391
转载 图的割点(代码)
用邻接链表来存储图,用flag数组来表示点的状态(是否为割点),最后输出割点。判断一个点是割点:1.当前节点不是根节点,且有一个儿子的low值大于等于它的num值。 2.当前节点是根节点,且至少有两个儿子。(儿子的low值不可能小于它的num)P.S.这是一个无向图,要将数组翻倍。#include#includ
2016-10-20 13:34:53 275
转载 UVa 136 Ugly Numbers
实现方法:从小到大生成各个丑数。(对于任意丑数x,2x、3x和5x都是丑数)每次要取队列中最小的数来生成后面的数(为了统计已生成的数的个数),但队列中的元素并不是按照大小顺序排列的,所以要用到优先队列:priority_queue, greater >。每一次用过x生成三个数之后就将x出队。注意:需要使用long long数据类型。#include#include#incl
2016-10-17 13:05:26 256
转载 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 235
转载 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 320
转载 UVa 156 Ananagrams
因为要字母重排,所以要把每一个单词标准化,即全部转化为小写字母后再进行排序。用map来统计标准化后的单词出现的次数,最后将值为1的单词加入到ans集合中。(标准化必须是动态的,不能改变原来的单词!)#include#include#include#include#include#include#includeusing namespace std;string s;ma
2016-10-15 23:28:26 257
转载 UVa 10815 Andy's First Dictionary
因为需要找出不同的单词,所以可以利用set的性质,即元素不重复并且是有序的(这样就不用再排序)。1.几个函数:isalpha() 判断字符是否是字母,如是,返回值为truetolower() 将字母转化为小写字母,如不是字母,则不作处理2.字符串流读入时会自动略过空格,所以如果只想提取单词可以将所有的标点符号都变成空格。3.set的常用函数: set.inser
2016-10-15 22:59:09 222
转载 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 267
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人