
紫书
yxg_123
这个作者很懒,什么都没留下…
展开
-
紫书动规 例题9-13 UVA - 1220 Party at Hali-Bula 树形dp
题目链接:https://vjudge.net/problem/UVA-1220题意:题解:树形dp: 树的最大独立集问题 d[u][0]:=不选u能得到的最大人数 d[u][0]=sum{max(d[v][0],d[v][1]} d[u][1]:=选u能得到的最大人数 d[u][1]=sum{d[v][0]} 判断唯一性就是看当前点的孩子是不是不唯一的。初始唯一代码:#includ原创 2017-03-17 00:00:30 · 300 阅读 · 0 评论 -
紫书动规 例题9-2 UVA - 437 The Tower of Babylon dp
题目链接:https://vjudge.net/problem/UVA-437题意:题解:dp[i][j]:=考虑到前i个立方体并且第i个立方体以标号为j为高的最大值代码:#include <bits/stdc++.h>using namespace std;const int maxn = 30+5;int N,blocks[maxn][3],d[maxn][3];void get_dimen原创 2017-03-15 11:20:47 · 249 阅读 · 0 评论 -
紫书动规 例题9-1 UVA - 1025 A Spy in the Metro dp
题目链接:https://vjudge.net/problem/UVA-1025题意:题解:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst原创 2017-03-14 23:20:22 · 236 阅读 · 0 评论 -
紫书搜索 习题7-10 UVA - 11214 Guarding the Chessboard 迭代加深搜索
题目链接:https://vjudge.net/problem/UVA-11214题意:给出m*n棋盘上的目标点,求最少用几个皇后可以守卫所有目标点。 题解:类似八皇后做法,2维数组标记行、列、主对角线、副对角线。 代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a原创 2017-03-14 17:28:23 · 375 阅读 · 0 评论 -
紫书搜索 习题7-8 UVA - 12107 Digit Puzzle IDA*迭代加深搜索
题目链接:https://vjudge.net/problem/UVA-12107题意:给出一个数字谜,要求修改尽量少的数,使修改后的数字谜只有唯一解。空格和数字可以随意替换,但不能增删,数字谜中所有涉及的数必须是没有前导零的正数。输入数字谜一定形如a*b=c,其中a、b、c分别最多有2、2、4位。题解:http://www.cnblogs.com/tyty-Somnuspoppy/p/636672原创 2017-03-14 16:59:20 · 893 阅读 · 0 评论 -
紫书搜索 习题7-7 UVA - 12558 Egyptian Fractions (HARD version) IDA*迭代加深搜索
题目链接:https://vjudge.net/problem/UVA-12558题意:题解:输出要用lld IDA*迭代加深搜索 紫书例题改一改代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_p原创 2017-03-14 15:25:17 · 295 阅读 · 0 评论 -
紫书搜索 习题7-6 UVA - 12113 Overlapping Squares 暴力
题目链接:https://vjudge.net/problem/UVA-12113题意:题解:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst原创 2017-03-14 12:18:28 · 316 阅读 · 0 评论 -
紫书搜索 习题7-4 UVA - 818 Cutting Chains 暴力+dfs判环+位运算
题目链接:https://vjudge.net/problem/UVA-818题意:选几个圆环去open。然后该圆环和其他就断开了。然后用这些open的圆环去连接剩下的圆环【最后打开的会合上】,看能不能连成一串。。求最少的open个数。题解:n为15.利用位运算去枚举哪几个圆环要open。然后判断剩下圆环有没有与超过2个圆环的连接或者形成环,如果没有,在判断剩下的链个数有没有超过open个数-1.如原创 2017-03-14 10:41:06 · 268 阅读 · 0 评论 -
紫书搜索 习题7-3 UVA - 211 The Domino Effect 搜索dfs
题目链接:https://vjudge.net/problem/UVA-211题意:给一副图,代表多米诺骨牌摆放方式,每两个连成一块牌,如0 0 对应1号排 0 1 对应2号排,问图可以代表几种摆放方式。题解:dfs,每个位置的牌不是竖就是横,枚举2个方向,最多枚举28块,O(2^28),加个剪枝,如果进入枚举下一行了,当前行还有没填上的,就直接回溯。代码:#include <bits/stdc++原创 2017-03-13 23:04:38 · 306 阅读 · 0 评论 -
紫书动规 例题9-3 UVA - 1347 Tour dp
题目链接:https://vjudge.net/problem/UVA-1347题意:题解:改成两个人同时从最左点出发,沿着两条不同的路径走,最后都走到最右点,且除了起点和终点以外其余每个点恰好被一个人经过。 dp[i][j]:=第一个人走到i,第二个人走到j,且1~max(i,j)全部走过,还需要走多长的距离; 因为dp[i][j]=dp[j][i],所以规定i>j; 对于每个人,只允许走到原创 2017-03-15 11:46:47 · 292 阅读 · 0 评论 -
紫书动规 例题9-4 UVA - 116 Unidirectional TSP 多段图的最短路 dp
题目链接:https://vjudge.net/problem/UVA-116题意:题解:dp[i][j]:= 从(i,j)出发到最后一列的最小开销 因为字典序最小,所以每次往前一列转移,都要先从这列 行数最小的位置转移 dp[i][j] = min(dp[i][j],dp[row[k]][j+1]+a[i][j]); 边界是dp[i][m-1] = a[i][m-1]代码:#include原创 2017-03-15 13:12:40 · 493 阅读 · 0 评论 -
紫书动规 例题9-12 UVA - 12186 Another Crisis 树形dp
题目链接:https://vjudge.net/problem/UVA-12186题意:题解:d[u]:=让u给上级发信最少需要多少工人。假设u有k个节点,则至少c=(kT-1)/100+1个直接下属发信才行。 把所有子节点的d值从小到大排序,取前c个加起来就是当前的答案。代码:#include <bits/stdc++.h>using namespace std;typedef long lo原创 2017-03-16 22:32:54 · 372 阅读 · 0 评论 -
紫书动规 P282的问题 hdu2196 树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196题意:题解:http://blog.youkuaiyun.com/shuangde800/article/details/9732825 f[i][0],表示顶点为i的子树的,距顶点i的最长距离 f[i][1],表示Tree(i的父节点)-Tree(i)的最长距离+i跟i的父节点距离要求所有的f[i][0]原创 2017-03-16 21:34:58 · 246 阅读 · 0 评论 -
紫书动规 例题9-10 UVA - 1626 Brackets sequence 区间dp
题目链接:https://vjudge.net/problem/UVA-1626题意:题解:dp[i][j]:= i~j需要最少的括号 区间dp: dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+1][j]); (i<=k代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#de原创 2017-03-16 19:24:48 · 265 阅读 · 0 评论 -
紫书动规 例题9-9 UVA - 10003 Cutting Sticks 区间dp
题目链接:https://vjudge.net/problem/UVA-10003题意:题解:dp[i][j]:=切割小木棍i~j的最优费用,枚举中间切割点,这段的费用是该段的长度 d[i][j] = min(d[i][j],dp(i,k)+dp(k,j)+a[j]-a[i]);代码:#include <bits/stdc++.h>using namespace std;typedef lon原创 2017-03-16 18:14:54 · 215 阅读 · 0 评论 -
紫书动规 例题9-8 UVA - 1625 Color Length dp
题目链接:https://vjudge.net/problem/UVA-1625题意:题解:蒟蒻感觉非常难 dp[i][]j] := 第一个串拿i个,第二个串拿j个的最小值 维护一个w[i][j] blablabla 看紫书吧 http://www.cnblogs.com/candy99/p/5985217.html代码:#include <bits/stdc++.h>using nam原创 2017-03-15 22:57:04 · 239 阅读 · 0 评论 -
紫书动规 例题9-7 UVA - 11584 Partitioning by Palindromes dp
题目链接:https://vjudge.net/problem/UVA-11584题意:题解:dp[i]:=考虑到第i个字符,的最少划分 dp[i] = min{dp[j]+1} (0<=j代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a)原创 2017-03-15 16:14:26 · 301 阅读 · 0 评论 -
紫书动规 例题9-6 UVA - 11400 Lighting System Design dp
题目链接:https://vjudge.net/problem/UVA-11400题意:题解:按照电压从小到大排序,一种灯泡要么不换,要么全换; 否则依旧是两个电源,没省钱。 因为可能电压高的费用小,肯定全换,并且还可以剩下一个电源费用 还可能电压高的费用大,那也要全换,跑一跑,取最小值,因为可能电源费用省的更多那。dp[i]:=前i个的最小费用 dp[i] = min(dp[i],dp[j]原创 2017-03-15 15:56:49 · 309 阅读 · 0 评论 -
紫书动规 例题9-5 UVA - 12563 Jin Ge Jin Qu hao dp-01背包
题目链接:https://vjudge.net/problem/UVA-12563题意:题解:01背包 一直想二维,但是对于第i首,能不能唱只和时间有关,和前i-1首最多唱了多少没有关系,不能从dp[i-1]转移唱完了一首歌,以这首歌的结束时间判断是否到了下一首该唱的时间dp[j]:=以j为结束时间,最多唱了多少首,注意j一定要倒着枚举,否则就被当前这首歌覆盖了,就是这首歌唱了好几遍【完全背包】代原创 2017-03-15 14:46:01 · 336 阅读 · 0 评论 -
紫书搜索 习题7-2 UVA - 225 Golygons 搜索dfs
题目链接:https://vjudge.net/problem/UVA-225题意:题解:枚举每一步的方向 没有想到字典序可以从一开始找方向就处理掉。 还有多一条剪枝,就是当前位置太远剩余的所有步数都不够回道原点代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,原创 2017-03-13 21:25:50 · 254 阅读 · 0 评论 -
紫书搜索 例题7-10 UVA - 11212 Editing a Book 迭代加深搜索 IDA*
题目链接:https://vjudge.net/problem/UVA-11212题意:题解:IDA*,每次改变深度上限去剪枝代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB原创 2017-03-13 19:36:09 · 241 阅读 · 0 评论 -
紫书搜索 习题7-1 UVA - 208 Firetruck 搜索dfs
题目链接:https://vjudge.net/problem/UVA-208题意:题解:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst i原创 2017-03-13 20:06:36 · 259 阅读 · 0 评论 -
dp uva1626 括号序列
题目链接状态转移d(i,j)表示子串S[i~j]至少需要加几个括号递推写法 快#include using namespace std;const int maxn = 100+5;char S[maxn];int n,d[maxn][maxn];bool match(char a, char b){ return (a=='(' && b==')'原创 2016-11-10 21:22:38 · 399 阅读 · 0 评论 -
dp uva1025
题目链接#include <bits/stdc++.h>using namespace std;const int INF = 1<<30;const int maxn = 50+5;const int maxt = 200+5;int N,T,a[maxn],t[maxn],M1,d,M2,e,dp[maxt][maxn],kase;bool has_train[maxt][maxn][原创 2016-11-10 18:04:31 · 257 阅读 · 0 评论 -
dp uva10003
题目链接状态转移 d(i,j) 为切割小木棍i~j的最优费用d(i,j) = min{d(i,k)+d(k+j)|i<k<j}+a[j]-a[i]#include <bits/stdc++.h>using namespace std;const int maxn = 50+5;int L,n,vis[maxn][maxn],d[maxn][maxn],a[maxn];int dp(int原创 2016-11-08 19:46:07 · 248 阅读 · 0 评论 -
dp最优矩阵相乘poj1651
题目链接#include <stdio.h>#include <iostream>#include <algorithm>using namespace std;const int INF = 1e9;const int maxn = 1000+5;int dp[maxn][maxn],n,p[maxn];int solve(int i,int j){ if(dp[i][j] !=原创 2016-11-08 18:35:37 · 313 阅读 · 0 评论 -
dp uva11584
题目链接#include <bits/stdc++.h>using namespace std;const int maxn = 1000+5;int n,kase,vis[maxn][maxn],p[maxn][maxn],d[maxn];char s[maxn];int is_palindrome(int i,int j){ if(i>j) return 1; if(s[i翻译 2016-11-08 16:18:08 · 337 阅读 · 0 评论 -
动态规划uva11400
题目链接#include <bits/stdc++.h>using namespace std;const int maxn = 1000+5;struct Lamp{ int v,k,c,l; bool operator<(const Lamp& rhs)const{ return v<rhs.v; }}lamp[maxn];int n,s[maxn]原创 2016-11-08 15:52:40 · 287 阅读 · 0 评论 -
动态规划uva12563
题目链接#include <bits/stdc++.h>using namespace std;const int maxn = 50+5;int T,n,t,a[maxn],dp[180*maxn];int main(int argc, char const *argv[]){ scanf("%d",&T); for(int cas=1; cas<=T; cas++){原创 2016-11-08 15:35:05 · 257 阅读 · 0 评论 -
动态规划uva1347
题目链接#include <bits/stdc++.h>using namespace std;const int maxn = 50+5;double x[maxn],y[maxn],dist[maxn][maxn],d[maxn][maxn];int main(){ int n; while(scanf("%d",&n) == 1){ for(int i=1;原创 2016-11-08 07:47:04 · 231 阅读 · 0 评论 -
dp uva12186树上的动态规划
题目链接d(u)表示让u给上级发信最少需要多少工人#include using namespace std;const int maxn = 1e5+10;int N,T,f;vector sons[maxn];int dp(int u){ if(sons[u].empty()) return 1; int k = sons[u].size(); vec原创 2016-11-10 23:44:24 · 222 阅读 · 0 评论 -
dp uva1220
题目链接树的最大独立集问题d(u,0) 表示以u为根的子树中,不选u点能得到的最大人数 f(u,0)=1表示唯一,否则不唯一d(u,1)--------------------------------选u f(u,1)=1表示唯一,否则不唯一#include using namespace std;const int maxn = 200+5;原创 2016-11-11 11:23:44 · 378 阅读 · 0 评论 -
紫书搜索 例题7-13 UVA - 1374 Power Calculus 迭代深搜+剪枝 IDA*
题目链接:https://vjudge.net/problem/UVA-1374题意:给定一个数n,让你求从1至少要做多少次乘除才可以从 x 得到 xn。题解:首先这个是幂级的,次数不会很多,所以可以考虑IDA*算法,这个算法并不难,难在找乐观函数h(x),这个题乐观函数可以是当前最大数*2^(maxd - d) 小于n,回溯。很好理解,最大的数再一直乘2都达不到,最终肯定达不到。再就是应该先试乘再原创 2017-03-12 19:46:43 · 293 阅读 · 0 评论 -
紫书搜索 例题7-12 UVA - 1343 The Rotation Game IDA*迭代加深搜索
题目链接:https://vjudge.net/problem/UVA-1343题意:数字1,2,3都有八个,求出最少的旋转次数使得图形中间八个数相同。 旋转规则:对于每一长行或每一长列,每次旋转就是将数据向头的位置移动一位,头上的数放置到尾部。若次数相同,则找出字典序最小旋转次序。 输入是从上到下,从左向右,注意方向题解:代码:#include <bits/stdc++.h>using na原创 2017-03-12 19:20:25 · 260 阅读 · 0 评论 -
紫书搜索 例题7-9 UVA - 1601 The Morning after Halloween 双向bfs
题目链接:https://vjudge.net/problem/UVA-1601题意:题解:http://blog.youkuaiyun.com/qq_29169749/article/details/51420097 隐式图搜索问题,类似dijkstra,用bfs解决,这个是单向搜索,弊端是有时候随着搜索的深入,可扩展的结点会越来越多,造成效率变慢,用双向bfs可以解决这个问题代码:双向bfs:#inclu原创 2017-03-12 17:01:32 · 301 阅读 · 0 评论 -
紫书搜索 例题7-6 UVA - 140 Bandwidth
题目链接:https://vjudge.net/problem/UVA-140题意:题解:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst i原创 2017-03-12 13:49:18 · 278 阅读 · 0 评论 -
紫书搜索 例题7-5 UVA - 129 Krypton Factor
题目链接:https://vjudge.net/problem/UVA-129题意:题解:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst i原创 2017-03-12 12:42:38 · 279 阅读 · 0 评论 -
紫书搜索 例题7-4 UVA - 524 Prime Ring Problem
题目链接:https://vjudge.net/problem/UVA-524题意:给一个n,要求生成1~n的排列,第一个数是1,相邻的两个数的和是素数,包括第一个和最后一个。题解:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#de原创 2017-03-12 12:05:23 · 259 阅读 · 0 评论 -
复杂状态的动态规划
最优配对问题:空间里有n个点P0,P1,…,Pn-1,你的任务是把它们配成n/2对(n是偶数),使得每个点恰好在一个点对中。所有点对中两点的距离之和应尽量小。 dp方程:d[i][S] 点0~i 的最优匹配,S为状态集合。d[i][S] = min(d[i][j],dist(i,j)+d[i-1][S-{i}-{j}]); 集合 S 和 j原创 2016-11-11 20:01:10 · 316 阅读 · 0 评论 -
dp uva1218
题目链接一共有三种状态: 1、d[u][0]:u是服务器,每个子结点可以是也可以不是。 2、d[u][1]:u不是服务器,但u的父亲是,u的子结点都不是服务器。 3、d[u][2]:u和u的父亲都不是服务器,u的子结点恰有一个是服务器。 三种状态的转移: d[u][0]=∑min(d[v][0],d[v][1])+1d[u][1]=∑d[v][2]d[u][2]原创 2016-11-11 19:03:06 · 192 阅读 · 0 评论