程序设计竞赛
文章平均质量分 73
godspeedkaka
这个作者很懒,什么都没留下…
展开
-
uva 12563劲歌金曲
动态规划例题在规定的时间内要唱最多的歌但最后要留出时间唱劲歌金曲,求唱最多的歌的个数以及此时的最长时间源码#include#includeint max(int x,int y){ if(x>=y) return x; else return y;}int d[55][10000];int len[55][10000];int main(){原创 2015-03-16 19:28:54 · 1702 阅读 · 0 评论 -
Topcoder
题干 The duration of the contest is T minutes and you are given N tasks. Solutions can be submitted at any time during the contest, including exactly T minutes after the start of the contest.原创 2015-03-16 19:31:37 · 462 阅读 · 0 评论 -
油田 uvaoj572
水题dfs统计八连快#include#includeconst int maxn=100+5;char pic[maxn][maxn];int idx[maxn][maxn],m,n;void dfs(int r,int c,int id){ if(r=m||c=n) return; if(!idx[r][c]||pic[r][c]!='@') return; idx[r][c原创 2015-03-16 20:05:20 · 793 阅读 · 0 评论 -
uva140 题解
DescriptionGiven a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and anordering on the elements in V, then the bandwidth of a node v is defined as the maximum dist原创 2015-04-12 18:58:59 · 564 阅读 · 0 评论 -
uva 1400题解
After doing Ray a great favor to collect sticks for Ray, Poor Neal becomes very hungry. In return for Neal's help, Ray makes a great dinner for Neal. When it is time for dinner, Ray arranges all t原创 2015-04-22 21:31:07 · 534 阅读 · 0 评论 -
uva 划分成回文串 11584 题解
题目大意是求把一字符串划分成尽可能少的回文串,用dp来做状态转移方程是d[i]=min{d[j]+1}其中j+1到i为回文串问题的关键在于如果每次转移都要判断j+1到i是不是回文串,那么时间复杂度将达到状态o(n)*决策o(n)*每次转移判断o(n),也就是o(n^3),所以预处理判断str【i】到str【j】是否为回文串,则复杂度可降到o(n^2)源码如下#include #原创 2015-05-01 12:42:45 · 486 阅读 · 0 评论 -
hdu 4020题解
一看题首先想到的是树状数组,可是交了n发都tle跪了,最后把memset(C,0,sizeof(C))改成memset(C,0,(m+2)*sizeof(C[0]));memset(cnt,0,sizeof(cnt))改成memset(cnt,0,(n+2)*sizeof(cnt[0]))才勉强ac,真是醉了.........ps:网上很多树状数组的题解都会tle.原创 2015-05-03 23:21:44 · 603 阅读 · 0 评论 -
uva 10905 题解(贪心水题)
题干略思路见码#include #include #include #include #include #include #include #include #include #include #include#include using namespace std; #define LL long long const int maxn=原创 2015-05-04 21:53:50 · 565 阅读 · 0 评论 -
uva 10382题解(贪心)
题目大意:有一块草坪,长为l,宽为w,在它的水平中心线上有n个位置可以安装喷水装置,各个位置上的喷水装置的覆盖范围为以它们自己的半径ri为圆。求出最少需要的喷水装置个数。Sample input8 20 25 34 11 27 210 213 316 219 43 10 13 59 36 13 10 15 31 19 1原创 2015-05-04 22:50:04 · 530 阅读 · 0 评论 -
uva live 4725题解
题目大意:机场上有两个跑道,分别为W和E,每个时刻,W和E都分别都分别有飞机进入跑道,每个跑道的飞机都按顺序从0开始排序,每个时刻都允许一架飞机起飞,现要求你安排起飞的飞机,使得任意时刻的飞机的最大编号最小解题思路:最小最大值问题,二分进行枚举剩余飞机最大数量,即id+1。先统计一下能起飞的总飞机数和W和E两个跑道能起飞的飞机数,如果总的起飞数小于两个跑道的所需起飞数原创 2015-05-06 17:36:47 · 610 阅读 · 0 评论 -
uva live3266(贪心)
题意就是田忌赛马,给出田忌和齐王的马的速度,赢一场得200,平了不赔不赚,输了输200,问最大能赢多少。表面上看上去挺简单,但是关于平局的处理稍微有点麻烦,思路见码。#include #include #include #include #include #include #include #include #include #include #inclu原创 2015-05-06 20:08:22 · 467 阅读 · 0 评论 -
uva 10534题解(lis)
题意是在一串数字中找到最长波浪子序列,即前k+1个递增,后k+1个数递减思路比较简单,从前往后求一遍lis,在从后往前求一遍,对于每个位置,取两个dp值的最小值,最后取所有位置的dp值的最大值乘2减1#include #include #include #include #include #include #include #include #include原创 2015-05-06 23:14:42 · 630 阅读 · 3 评论 -
uva 4256题解(简单dp)
题干是给定n个点连通图和一个序列,修改尽量少的书,使得序列中的任意两个相邻数或相等,或相连思路是用d[i][j]表示以j结尾的前i个数的最小修改次数,那么最后的答案为min(d[n][j])状态总数为o(n^2),转移为o(n),决策为o(1),故时间复杂度为o(n^3);#include #include #include #include #include #i原创 2015-05-07 23:26:32 · 580 阅读 · 0 评论 -
uva11552题解(dp)
题意是将一字符串划分为若干组,组内可以重排位置,求最后最小包含的块数(即相同字母组成的连续字符串的个数)这题是序列划分模型,有点类似于 商人那道题,主要是状态的设计,另dp(i,j)为第i个序列首字为j所能划分最小组数,可以很容易得到状态方程 ps额一开始脑洞开得有点大,各种边界没考虑清楚,需要注意的是,假如第i个序列以j开头,并不一定第i-1个序列以j结尾答案就最小,因为我们不能以局原创 2015-05-09 01:07:22 · 806 阅读 · 0 评论 -
uva 11795洛克人的难题(集合dp)
题意:给定一个初始武器,可以消灭编号1-i的人每消灭一个机器人,获得其武器。求总共可以有多少种方法消灭所有的机器人。思路很简单,集合的动态规划,但要注意的是,由于16!会爆int,所以ans要用ll类型,之前一直wa就是因为没注意这个问题.........上码#include #include #include #include #include #incl原创 2015-05-09 15:46:11 · 548 阅读 · 0 评论 -
uva live4731 蜂窝网络 题解(dp+贪心)
题意是:手机在蜂窝网络中的定位是一个基本问题。假设蜂窝网络已经得知手机处于c1, c2,…,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机。但这样做很浪费带宽。由于蜂窝网络中可以得知手机在这不同区域中的概率,因此一个折中的方法就是把这些区域分成w组,然后依次访问。比如,已知手机可能位于5个区域中,概率分别为0.3、0.05、0.1、0.3和0.25,w=2,则一种方法是先原创 2015-05-09 19:35:26 · 581 阅读 · 0 评论 -
hdu 1427速算24点(枚举全排列)
题意: 算24点相信绝大多数人都玩过。就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不原创 2015-05-13 00:47:34 · 1555 阅读 · 2 评论 -
hdoj 1426数独 (深搜回溯)
题意就是求数独的解数独游戏的规则是这样的:在一个9x9的方格中,你需要把数字1-9填写到空格当中,并且使方格的每一行和每一列中都包含1-9这九个数字。同时还要保证,空格中用粗线划分成9个3x3的方格也同时包含1-9这九个数字。比如有这样一个题,大家可以仔细观察一下,在这里面每行、每列,以及每个3x3的方格都包含1-9这九个数字。终于做了一道有点意思的题了,蛤蛤,虽然是水题,但一开始原创 2015-05-12 22:28:30 · 649 阅读 · 0 评论 -
uva 10603倒水问题(搜索 隐式图的最短路 )
题意是:有三个没有刻度的水壶,容量分别为a,b和c(单位为升,都是倒多少升的水?如果无解,找一个小于且最接近d的d’代替d。这题照书敲得....敲完后想了想这题问的是倒水量,那么其实也可以用dfs,这样会简单些...代码如下:#include #include #include #include #include #include #include #inc原创 2015-05-12 17:20:39 · 663 阅读 · 0 评论 -
uva 439骑士的移动(图的最短路 bfs)
题目:给出国际象棋棋盘中的两个点,求马从一个点跳到另一个点的最少步数。思路见码:#include #include #include #include #include #include #include #include #include #include #include#include #includeusing namespace原创 2015-05-11 20:57:01 · 553 阅读 · 0 评论 -
nyoj 吝啬的国度(dfs无根树转有根树)
题意是在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。思路很简单,无根树转有根树,然后对于每个节点打印双亲节点即可ps:一开始对vector忘了clear了,一直re......再忘剁手#include #i原创 2015-05-11 18:47:02 · 467 阅读 · 0 评论 -
uva 11988 破损的键盘(链表)
简单的数据结构基础,思路见码#include #include #include #include #include #include #include #include #include #include #include#include using namespace std; #define LL long long const int原创 2015-05-10 18:23:50 · 779 阅读 · 0 评论 -
uva 11997 k个最小和(优先队列实现多路归并)题解
题意是k个包含k个元素的数组,从每个数组中取一个元素求和,求前k小的和可以转化为多路归并,对k个表两两归并,最后输出结果ps......多输出一个空格结果pe了.....以后要记住代码如下:#include #include #include #include #include #include #include #include #include原创 2015-05-10 17:25:46 · 519 阅读 · 0 评论 -
uva 442 矩阵链接(表达式栈)题解
栈对于表达式求值的应用,遇到字母进栈,遇到右括号出栈两次运算后再进栈思路见码#include #include #include #include #include #include #include #include #include #include #include#include using namespace std; #define原创 2015-05-10 01:20:50 · 537 阅读 · 0 评论 -
uva 514 铁轨(栈)
数据结构基础题思路见码#include #include #include #include #include #include #include #include #include #include #include#include using namespace std; #define LL long long const int m原创 2015-05-09 23:46:32 · 440 阅读 · 0 评论 -
2015 whu校赛f题big data(dp + 小技巧)
题意是给定五个数n(n 解题思路如下:图片有一处错误,要减去的是a*(n + 1) * n而不是 (b - a)* (n + 1) * n,此外,要注意x/c时向上取整和向下取整的问题。这道题做做停停一个月了今天终于找时间ac了,有点感人呐代码如下:#include #include #include #include #include #include原创 2015-05-30 00:50:09 · 1170 阅读 · 0 评论 -
uvalive 4015 洞穴cave(树的dp/01背包)
题意:一棵n(n这道题想了两天,看了题解一开始也不明白(泪目),后来一想可以当成树上的01背包来做,终于ac,这应该是目前做的最难的一道动态规划题了。思路是:这道题的难点之一是可以返回父节点,而且由于x太大,状态里假如有x那么数组太大开不下,我们要另外选择一种方式表示状态,对此我们可以用两个状态来表示,用d[i][x][j+k][0]表示在以x结点为根结点的树中,从原创 2015-05-28 23:13:49 · 584 阅读 · 0 评论 -
LA 2038 战略游戏(树的动态规划基础题/无根树转有根树/树的最大最小结点集)
题目大意就是求树的最小结点集,树上的动态规划基础题,一次深搜就可以解决问题代码如下:#include #include #include #include #include #include #include #include #include #include #include#include #includeusing namespace s原创 2015-05-26 22:38:25 · 836 阅读 · 0 评论 -
LA 2191电位计(线段树模板题)
线段树模板题,没啥好说的.....注意输出是case之间空一行就行.........之前一直没注意,一直wa代码如下:#include #include #include #include #include #include #include #include #include #include #include#include #include原创 2015-05-26 14:48:49 · 743 阅读 · 0 评论 -
uva 11987 几乎就是并查集(并查集+一点小技巧)
题意:初始有N个集合,分别为 1 ,2 ,3 .....n。有三种操件1 p q 合并元素p和q的集合2 p q 把p元素移到q集合中3 p 输出p元素集合的个数及全部元素的和。1、3操作比较简单,关键是2操作,并查集不能删除元素,但是我们要求的结果其实和要删除的元素没有关系,所以我们考虑用一个新的节点代替要删除的元素,用nid表示要删除的元素的新的id,这样我们就可以实现原创 2015-05-25 01:45:18 · 718 阅读 · 0 评论 -
hdu 3234 异或(加权并查集)
有n(nI p v :告诉你Xp=v I p q v :告诉你Xp Xor Xq=v Q k p1 p2 … pk : 询问 Xp1 Xor Xp2 .. Xor Xpk, k不大于15。 如果当前的I跟之前的有冲突的话,跳出 思路就是并查集的扩展,每个节点表示他与根结点的异或值 。。。。思路略ps:忘打了个.导致wa了好长时间............原创 2015-05-24 22:06:50 · 1091 阅读 · 0 评论 -
LA 3207 合作网络 (加权并查集)
题意:有n个数进行,操作,'I'操作把a和b连接起来,而且a和b的距离即|a-b|%1000;'E'操作进行查询那个数到根节点的距离和;'O'操作结束。因为题目只查询结点到根结点的距离,故可用并查集,如果记录每个节点到根的距离,那么每次I操作都要更新很多节点的信息,时间复杂度难以保证,因此考虑记下每个结点到父结点的距离,然后在路径压缩时维护这个d数组代码如下#include原创 2015-05-24 16:11:47 · 790 阅读 · 0 评论 -
hust校赛d题 PHP is the best language int the world(二分图着色+递推)
题目大意是给出一个图,要求判断是否是二分图,如果是,求二分图两个节点集之差的最小值。两个人如果不会争吵的话连一条边,形成一个图,取这个图的反图。这个反图之间存在边则说明这两个人不能在同一个team。首先二分染色看是否能够将反图变成一个二分图。如果能染成二分图,记录每个二分图颜色人数。在某个联通分量里白色/黑色可以交换。接下来用dp[i][j] = 1表示前i个联通分量能够形成一个人原创 2015-05-22 23:00:08 · 1577 阅读 · 0 评论 -
hust校赛c题 Move the Books(“最重上升子序列”)
题意是:给定一组整数,通过移动使这个序列变为递增的,移动i元素的话费为i例如 2 2 5 3 4通过移动5使得序列变为2 2 3 4 5故最小花费为5,如果移动3 4那么花费会为7这道题可以通过求“最重上升子序列”来间接地得到结果,dp[i]表示以weight[i]为终点递增的最重的一系列书的重量之和。状态转移方程是dp[i] = max(dp[i], dp[k] +原创 2015-05-22 20:03:50 · 613 阅读 · 0 评论 -
uva 11525排列(树状数组 + 二分)
现在给定k和n,要你按字典序输出 第n种排列的数列而且题目给的 n是 n=S1(k-1)!+S2(k-2)!+...+Sk-1*1!+Sk*0!(0=我们可以知道si表示i后面有多少个比a[i]小的数,这样一来首先想到的就是set,但是set不能顺序访问,所以可以用树状数组,初始时置1,消除后置0,然后二分来求和为si + 1的位置代码如下:#include #incl原创 2015-05-20 22:03:20 · 658 阅读 · 0 评论 -
uva 11549计算器谜题(floyd判圈算法)
floyd判圈算法(龟兔赛跑算法)原创 2015-05-20 18:13:24 · 897 阅读 · 0 评论 -
hust校赛 f题 The tree of hust(lis 变形)
题目大意是给出一段数字序列,可以忽略一次一段连续的序列,求忽略后的最长连续上升子序列思路是dp,用end数组记录以当前元素作为结尾的最长连续上升序列的元素个数,那么不难得到状态转移方程为dp(i) = max(dp(i - 1), max( end[k] ) ) + 1代码如下:#include #include #include #include #includ原创 2015-05-19 21:12:01 · 585 阅读 · 0 评论 -
hdu 4000 Fruit Ninja(树状数组)
题目大意是给定一串1到n的排列(设为数组a),求其中满足a[x]直接求这样的排列个数并不好求,我们可以转化为求a[x]用left数组记录i位置前比a[i]小的元素个数,left数组可由树状数组预处理得到,那么我们可以得到求排列个数的公式(具体见码)#include #include #include #include #include #include #inc原创 2015-05-18 21:19:21 · 712 阅读 · 0 评论 -
hdu 1251 统计难题 (前缀树)
题意是:Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).思路很简单,前缀数组入门题,对于每个结点,用val数组记录当前字符串为前缀的字符串数量,之后就是插入,查询操作了代码如下: #include #include #include原创 2015-05-18 19:35:52 · 599 阅读 · 0 评论 -
codeforces 66 D. Petya and His Friends(数论)
给定n,要求给出n个数,是的任意两数不互质,但所有数的最大公约数为1很简单,所有数的最大公约数为1只需三个数最大公约数为1,假设a,b,c为素数,设第一个数为ab,第二个数为ac,第三个数为bc,则这三个数最大公约数已经为1,那么剩下的数只要满足与他们不互质即可,不妨令以后的数为 bc*i(i>1),则问题已解。#include #include #include #inclu原创 2015-05-17 18:37:15 · 580 阅读 · 0 评论