
动态规划
Yuta233
这个作者很懒,什么都没留下…
展开
-
uva11400 照明系统设计
通过这个题目我以为我了发现数据结构课本快排代码的一个bug。 书上的快排代码:template class T>void quickSort(T a[], int leftEnd, int rightEnd){// Sort a[leftEnd:rightEnd], a[rightEnd+1] >= a[leftEnd:rightEnd]. if (leftEnd >= right原创 2018-01-22 01:06:56 · 350 阅读 · 0 评论 -
UVA 1252
https://vjudge.net/problem/UVA-1252为了叙述方便,设“心里想的物体”为W。首先在读入时把每个物体转化为一个二进制整数。不难发现,同一个特征不需要问两遍,所以可以用一个集合s表示已经询问的特征集。在这个集合s中,有些特征是W所具备的,剩下的特征是W不具备的。用集合a来表示“已确认物体W具备的特征集”,则a一定是s的子集。设d(s,a)表示已经问了特征集s原创 2018-01-28 22:53:06 · 353 阅读 · 1 评论 -
UVA 10187 校长的烦恼
可以用二进制表示子集,这种表示方法真的非常省时间空间,其中从右往左第i位(从0开始编号)表示元素i是否在集合中(1表示“在”,0表示“不在”) e.g. 二进制的1111换算成十进制就是15,如果用15代表全集A的话,那么1101b(b是二进制)即13d(十进制)就代表了A的一个具有第1、第3、第5个元素的子集B。本题的做法有很多。一种相对容易实现的方法是:用两个集合s1表示恰好有一个人教原创 2018-01-28 10:49:33 · 367 阅读 · 0 评论 -
UVA 1218 完美的服务
https://vjudge.net/problem/UVA-1218这题注意边界情况。在叶子节点d【u】【2】要注意区别取值,我这里采用的maxn标记。 而且d【u】【1】的取值,在u的孩子中如果有叶子节点那么这个策略是行不通的,也要标记。 接下来就是深度搜索了。我跟网上其他人的做法不太一样。这是一个比较易于理解的做法,写出来发现可以过就没再优化。其实计算d【u】【2】可以再快一点,具体原创 2018-01-26 23:03:26 · 326 阅读 · 0 评论 -
UVA 1220 Hali-Bula的晚会
题目描述:https://vjudge.net/problem/UVA-1220判断一个图是否是树:一个图G如果是无回路的连通图,或者是n-1条边的连通图,那么G就是树。树上的DP类问题一般用深度优先遍历解决。本题几乎就是树的最大独立集问题,不过多了一个要求:判断唯一性。设: d(u,0)和f(u,0)表示以u为根的子树中,不选u点能得到的最大人数以及方案唯一性 (f(u,0)=1表示原创 2018-01-26 22:56:45 · 336 阅读 · 0 评论 -
uva 12563 劲歌金曲
先介绍自己写的,比较循规蹈矩的方法。dp(i,j)表示必须在j时间内结束,在i,i+1,,,,n首歌中选择,可以唱的最大歌曲数 (包含jq) sing(i,j)表示在这个状态、歌曲数取最大的情况下,可以唱的最长时间 (包含jq)#include#include#include#define maxn 50+10#define maxt 10000+10#define jq 678原创 2018-01-16 23:29:00 · 365 阅读 · 0 评论 -
UVA 1626 括号序列
题目描述:https://vjudge.net/problem/UVA-1626设串S至少需要增加d(S)个括号,转移如下: 如果S形如(S′)或者[S′],转移到d(S′)。 如果S至少有两个字符,则可以分成AB,转移到d( A )+d(B)。 边界是:S为空时d(S)=0,S为单字符时d(S)=1。注意(S′, [S′, ) S′之类全部属于第二种转移,不需要单独处理。 注意:不管原创 2018-01-24 12:12:02 · 312 阅读 · 0 评论 -
codevs1014 装箱问题
题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入描述 Input Description 一个整数v,表示箱子容量一个整数n,表示有n个物品接下来n个整数,分别表示这n 个物品的各自体积输出描述 Output原创 2018-01-15 20:30:22 · 324 阅读 · 0 评论 -
codevs1068 乌龟棋
题目来源:codevs 1068题目描述 Description小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一 的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。…… 1 2 3 4 5 ……N 乌龟棋中M张爬行卡片,分成4种不同的类型(M张卡片中不一定包含所原创 2018-01-12 12:05:44 · 249 阅读 · 0 评论 -
uva116 tsp
题目描述:————————————————————————- 在这个题目中,每一列就是一个阶段,每个阶段都有3种决策:直行、右上和右下。 多阶段决策的最优化问题往往可以用动态规划解决,其中,状态及其转移 类似于回溯法中的解答树。解答树中的“层数”,也就是递归函数中的“当前填充位置”cur,描述的是即将完成的决策序号,在动态规划中被称为“阶段”。#include#includeus原创 2018-01-15 20:21:17 · 272 阅读 · 0 评论 -
uva1347 tour
题目描述:———————————————————————————- “从左到右再回来”不太方便思考,可以改成:两个人同时从最左点出发,沿着两条不同 的路径走,最后都走到最右点,且除了起点和终点外其余每个点恰好被一个人经过。这样, 就可以用d(i,j)表示第一个人走到i,第二个人走到j,还需要走多长的距离。 状态如何转移呢?仔细思考后会发现:好像很难保证两个人不会走到相同的点。例如, 计算原创 2018-01-15 20:11:13 · 292 阅读 · 0 评论 -
本地和oj同样数据测出来不同结果的原因
1.11在做codevs1014装箱问题的时候,由于我编程水平不够,发生了一件令当时的我匪夷所思的事。特此记录,防止今后在出现类似问题。题目描述 Description: 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入描述 Input Descripti原创 2018-01-15 16:59:34 · 7645 阅读 · 1 评论 -
UVA 10003 cutting sticks
典型的区间型DP#include #include#include#include#includeusing namespace std; #define maxn 50+10int len,n;int loc[maxn];int d[maxn][maxn];string s="";int fun(int i,int j){ if(j-i==1)原创 2018-01-22 22:59:23 · 239 阅读 · 0 评论 -
uva1625 颜色的长度
注意每次循环中对d数组的初始化,不需要调用memeset(d,-1,sizeof(d));因为d数组申请了maxl=5000+10的空间大小,这个语句在实际执行会很耗时间。而且也并不是d数组所有的空间都需要初始化。只初始化会用到的值足矣。#include#include#include#includeusing namespace std;#define maxn 26+10原创 2018-01-22 22:57:25 · 339 阅读 · 0 评论 -
uva1025 城市里的间谍
#include #define INF 100000using namespace std;int n,T,*t,M1,*d1,M2,*d2,***has_train;int** dp;void hasTrain(){has_train=new int**[T+1];for(int i=0;i{has_train[i]=new int*[n+1];原创 2018-01-13 18:12:31 · 307 阅读 · 0 评论 -
uva437 巴比伦塔
DGA最长路问题#include #include#include using namespace std;int typeNum;int** blos;int** d;int count=0;string s="";void fun(int i,int a,int b,int c){ if(a>b){ int t=a;a=b;b=t;原创 2018-01-13 23:21:49 · 300 阅读 · 0 评论 -
uva 11584 划分回文串
线性DP问题 设d【i】代表a【0:i】字符构成的串中划分成回文串的最小个数 则有状态转移方程:d【i】=min{d【j】+1|a【j+1:i】为回文串} 可以这么理解方程:d【i】表示【0:i】范围的最优方案,由最优子结构性质,d【i】的表示也是由几个最优项组成:d【j】,1.#includeusing namespace std;#define maxl 1000+10#def原创 2018-01-20 23:21:27 · 264 阅读 · 0 评论