
UVa
flaaaaaaame
Hope is floating on the breeze.
展开
-
UVa12186 Another Crisis
题目描述 设d(u)d(u)表示u给上级发信最少需要多少个工人写。 则d(u)d(u)等于u的从小到大前几个满足TT%的子节点的d值之和。 代码#include<cstdio>#include<iostream>#include<cstring>#include<vector>#include<algorithm>using namespace std;int n,t;vecto原创 2017-07-31 21:18:09 · 362 阅读 · 0 评论 -
UVa1629 Cake Slicing
题目描述 设d(r,c,i,j)d(r,c,i,j)为以r,cr,c为左上角,长宽分别为i,ji,j的矩形还需要最少切割长度。 则在它内部切一刀可转移到其他两块矩形(切后两块矩形内至少要有一个樱桃) 边界是当矩形内部只有一个樱桃时d(r,c,i,j)d(r,c,i,j)=1; 先预处理出每一块矩形内部有几个樱桃。 代码#include<cstdio>#include<iostream>原创 2017-08-12 16:52:36 · 449 阅读 · 0 评论 -
UVa10285 Longest Run on a Snowboard
题目描述 DP 代码#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<cstring>using namespace std; string s;int n,m,t,d[110][110],a[110][110];int dp(int i,int j){ int原创 2017-08-12 21:47:55 · 292 阅读 · 0 评论 -
UVa10970 Big Chocolate
题目描述 哈哈哈超级大水题~~ 代码#include<cstdio>using namespace std;int main(){ int a,b; while(scanf("%d%d",&a,&b)==2) printf("%d\n",a*b-1); return 0;}原创 2017-08-13 17:04:35 · 418 阅读 · 0 评论 -
UVa10635 Prince and Princess
题目描述 传送门求两序列的LCS,当序列元素两两互不相等可转化为LIS。 LIS可以用O(nlogn)O(nlogn)的算法求解。 (但我还是理解不透彻,总感觉在背模板…)代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=7原创 2017-09-07 13:24:14 · 337 阅读 · 0 评论 -
UVa11552 Fewest Flops
题目描述 传送门DP,设d(i,j)d(i,j)为前ii段(kk个字母为1段)以字符jj结尾能得到的最少块数,可以发现把每段重排字符顺序时相同字符排在一起一定最好。代码#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cstdlib>using namespace std;bool原创 2017-09-03 13:12:32 · 308 阅读 · 0 评论 -
UVa10524 Wavio Sequence
题目描述 传送门最长上升子序列和最长下降子序列,O(nlogn)O(nlogn)算法理解的还不是很透彻。代码#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>using namespace std;int a[10010],b[10010],g[10010],f[10010],d1[10010],d2[1原创 2017-09-03 13:19:09 · 266 阅读 · 0 评论 -
UVa10537 Toll! Revisited
题目描述 传送门考虑到反向做Dijkstra,终点的dd值为pp,反向Dijkstra时对于当前的(u,v)∈E(u,v)\in E 可以推出如果vv是村庄,边权为11;如果是城镇,边权为⌈d(u)/19⌉\lceil d(u)/19 \rceil。为了方便,加了个虚拟终点00。代码#include<cstdio>#include<iostream>#include<cstring>#incl原创 2017-10-19 19:14:33 · 309 阅读 · 0 评论 -
UVa4080 Warfare And Logistics
题目描述 传送门尝试删mm条边重新计算nn个点的最短路时间复杂度O(nm2logn)O(nm^2logn) 但对于点ii只有删除了以ii为源点的最短路树上的边才需要重新计算。 预处理好每个点的最短路树,这样最多计算O(n2)O(n^2)次单源最短路,时间复杂度降为O(n2mlogn)O(n^2mlogn)代码#include<cstdio>#include<iostream>#include原创 2017-10-19 19:26:10 · 255 阅读 · 0 评论 -
UVa10917 Walk Through the Forest
题目描述 传送门根据题目意思建立DAG,再统计路径条数。代码#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int maxn=1005,maxm=(maxn-1)*(maxn-2);const int INF=1e原创 2017-10-19 19:36:24 · 338 阅读 · 0 评论 -
UVa11374 Airport Express
题目描述 传送门正反向Dijkstra,枚举商业线。 坑点:最后输出路径,格式。代码#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int maxn=1005,maxm=(maxn-1)*(maxn-2);con原创 2017-10-19 19:33:35 · 283 阅读 · 0 评论 -
UVa11825 Hackers' Crackdown
题目描述 传送门简单的状态压缩DP。代码#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn=18;int d[1<<maxn],p[maxn],S1[1<<maxn];int main(){ int n,kase=0;原创 2017-10-20 09:15:37 · 353 阅读 · 0 评论 -
UVa 10859 Placing Lampposts
题目描述 传送门根据蓝书的思路: 设d(i,j)d(i,j)为以ii为根节点的子树,ii的父节点是否放灯(jj=0,1分别为放和不放)的最小方案数。 因为在放置街灯aa相等的情况下还有第二个比较条件,把条件统一为恰好被一盏灯照亮的边数c尽量小。设一个适当的数M,转换为最优化x=Ma+cx=Ma+c,M的选取要使在a1<a2a_1<a_2的情况下x1=Ma1+c1x_1=Ma_1+c_1一定小于x原创 2017-10-20 10:57:11 · 342 阅读 · 0 评论 -
UVa10618 Tango Tango Insurrection
题目描述 紫书上的例题,一开始不知道为什么要加上一个移动的脚的维度。 突然发现自己语文&英语阅读能力巨差,看了n久题目才看懂,,,,, 设d(i,a,b,s)d(i,a,b,s)表示已经踩了ii个箭头,左右脚分别在aa,bb上,上一次移动的脚为ss 转移过程详见代码。 代码(写的有点烂)#include<cstdio>#include<iostream>#include<cstring原创 2017-08-12 13:44:08 · 342 阅读 · 0 评论 -
UVa11462 Age Sort
题目描述 计数排序 代码#include<cstdio>#include<iostream>using namespace std;int main(){ int n; while(scanf("%d",&n)==1&&n){ int c[101]={0},x; for(int i=0;i<n;i++){ scanf(原创 2017-08-12 09:47:48 · 288 阅读 · 0 评论 -
UVa1220 Party at Hali_Bula
题目描述 树上最大独立集,解的唯一性。#include<cstdio>#include<iostream>#include<cstring>#include<vector>#include<algorithm>#include<map>#include<string>using namespace std;const int maxn=210;int n,d[maxn][2];原创 2017-07-31 21:13:29 · 306 阅读 · 0 评论 -
UVa1218 Perfect Service
题目描述 树形dp题。 设:d(i,k)d(i,k)表示以i为子树满足题意的需要最少服务器数量。 且: d(i,0)d(i,0)表示i和i的父亲节点都不装服务器; d(i,1)d(i,1)表示i的父亲装了但i不装; d(i,2)d(i,2)表示i节点装服务器。 则: d(i,0)=min(∑kϵson(i)d(k,0)+d(j,2)|k≠j)d(i,0)=min(\sum_{k\原创 2017-07-31 20:49:29 · 303 阅读 · 0 评论 -
UVa1626 Brackets sequence
题目描述 设f(i,j)f(i,j)为将区间i~j变成正规括号序列需要加的最少括号数。 f(i,j)=min(f(i,k)+f(k+1,j))f(i,j)=min(f(i,k)+f(k+1,j)) 当s[i]和s[j]是一对括号时,还可以作如下转移: f(i,j)=min(f(i,j),f(i+1,j−1))f(i,j)=min(f(i,j),f(i+1,j-1)) 边界为f(i,i)f原创 2017-07-31 08:33:16 · 325 阅读 · 0 评论 -
UVa10003 Cutting Sticks
题目描述 也是比较简单的dp 设f(l,r)f(l,r)为切l~r段的最小花费. f(l,r)=min(f(l,k)+f(k,r))+r−lf(l,r)=min(f(l,k)+f(k,r))+r-l(l<k<r)(l<k<r) 其中k为可切的点。 边界是f(l,r)=0(区间[l,r]内没有可切的点)f(l,r)=0(区间[l,r]内没有可切的点) 答案是f(0,L)f(0,L) 状态有原创 2017-07-31 08:22:39 · 318 阅读 · 0 评论 -
UVa11584 Partitioning by Palindromes
题目描述 求最少能划成多少个回文串,比较简单。 设f(i)f(i)为前i个字符组成的串最少能划分成多少个。 f(i)=min(f(j)+1)f(i)=min(f(j)+1) (j+1~i是回文串) 如果临时判断回文串要O(n)O(n)的时间。 总时间复杂度O(n3)O(n^3) 用O(n2)O(n^2)的时间预处理后可降为O(1)O(1) 总时间复杂度降为O(n2)O(n^2) 代码原创 2017-07-31 08:21:10 · 290 阅读 · 0 评论 -
UVa1025 A Spy in the Metro
第一道DP题….(以前做dp都是看题解,,,) 第一次独立做很不熟练,很多细节错误。题目描述 Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After several thrilling events we nd her in the rst stat原创 2017-07-28 20:58:51 · 388 阅读 · 0 评论 -
UVa437 The Tower of Babylon
题目描述 Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of this tale have been forgotten. So now, in line with the educational nature of this contest, we will tell you原创 2017-07-28 20:58:12 · 383 阅读 · 0 评论 -
UVa1347 Tour
题目描述 这道题我想了很久都没有想到…….看了lrj的题解才会做。 首先可以想到转化成两个人向右走。 关键在于状态的设计。 设f(i,j)f(i,j)为走完了前max(i,j)max(i,j)的点,且两个人分别在i、j的位置,且i>ji>j,最少还要走多远才能到终点。 f(i,j)=min(f(i+1,j)+dist(i,i+1),f(i+1,i)+dist(j,i+1))f(i,j)=m原创 2017-07-28 20:57:44 · 445 阅读 · 0 评论 -
Uva116 Unidirectional TSP
题目描述 这是一道简单的DP题,记录路径可以用一个p数组; 设f(i,j)f(i,j)为从格子i,j出发到最右端的最小数字和。 边界是f(n−1,j)=a(n−1,j)f(n-1,j)=a(n-1,j) 我的程序n和m是反的,,,#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include原创 2017-07-28 20:57:19 · 420 阅读 · 0 评论 -
UVa12563 Jin Ge Jin Qu hao
题目描述 01背包问题,要求在装的多的情况下尽可能满。 滚动数组压缩空间。#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath> using namespace std;const int maxt=50*180+678+10;原创 2017-07-28 20:56:46 · 274 阅读 · 0 评论 -
UVa11400 Lighting System Design
题目描述 说实话我觉得这题的状态转移方程并不好想(准确说我最后也没想出来,看了lrj的题解,也许是我太菜) 首先每种灯要么不换要么全换是一个要点。 那么将灯按照电压v排好序。 设d(i)d(i)为前i种灯的最优方案。 则:d(i)=min(d(j)+(s(i)−s(j))∗c(i)+k(i))d(i)=min(d(j)+(s(i)-s(j))*c(i)+k(i)) 表示前j个先用最优原创 2017-07-28 20:56:15 · 389 阅读 · 0 评论 -
UVa10817 Headmaster's Headache
题目描述 参照紫书上的思路,一开始d值初始化为0 TLE 了…… 代码#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<string>#include<sstream>using namespace std;int s,m,n,d[125][265][265],c[140],原创 2017-08-11 23:25:30 · 268 阅读 · 0 评论 -
LA 2038 Strategic game
题目描述 传送门注意此题蓝书上的翻译有误! 蓝书上说“使得每个没有选中的节点至少和一个以选中的节点相邻”,而题目要求的是使得每条边至少和一个以选中的节点相邻。 搞得我硬是找不出错。 简单的树上DP,设d(i,0),d(i,1)d(i,0),d(i,1)分别为以ii为根节点的子树ii点不放兵和放兵总共所需的最小放兵数量,转移简单。代码#include<cstdio>#include<iostr原创 2017-10-20 15:22:47 · 380 阅读 · 1 评论