UVA
DS_HY
这个作者很懒,什么都没留下…
展开
-
UVA10817 Headmaster's Headache (状压DP)
题目网址:https://vjudge.net/problem/UVA-10817题意:S门课程,M个教师,N个待聘教师。每个教师都有工资数和能够教授课程种类,要求在M个教师全部选择的基础上,再选择性的雇佣一部分待聘教师,在保证S门课程都至少有2人教授的前提下,付出的工资最少。s<8思路: 我们通过课程信息来确定最终结果,用三个状态s0,s1,s2的二进制位来代表课程当前的状...原创 2018-10-02 10:57:11 · 249 阅读 · 0 评论 -
UVA - 1423(拓扑排序)
题目网址点击打开链接;妈耶真的是这个想法太奇妙;以前拓扑排序不太懂。这里加几个关于拓扑排序的博客。有一篇代码虽然是java,但是思想是不错的点击打开链接点击打开链接;解题思路:把题目转化成已知各个前缀和的大小关系,求每个前缀和的值。s(i, j) 符号为正的话,表示a[i]+a[i+1] +.. a[j] > 0,即前缀和sum[j] - sum[i-1]原创 2017-08-25 10:43:56 · 245 阅读 · 0 评论 -
UVALive - 7018 Dragons
题目网址点击打开链接开始以为只需要选择最大Ni然后根据SI与Ni关系更新寻找到Ni比答案也小就好了,原来的思路写wa了,唉,,,但是可以进一步写一下;对于每个城市团,转移时间可以忽略不计,但是注意每一个团必须要派兵;对于派兵杀龙发现,只要总兵数大于龙头增长数,一定可以杀死,只是时间问题;所以,按增长排序大小以后,每个龙,可以派他原来的头数去直接杀死他,也可以只要比他增长原创 2017-08-24 19:42:17 · 301 阅读 · 0 评论 -
UVA - 1220 Party at Hali-Bula(树形dp)
题目地址点击打开链接;开始以为是各种dfs爆搜yy中。。。;不想完全看题解,搞了很久,看了一眼后缀,据说是树形dp;然后顿悟开始修改;随他去吧;用一个二维dp【a】【b】 来更新最大值,a表示这个节点的编号,b有两个值,0,1表示这个点取与不取;用一个vector来建树;从根节点开始,也就是big boss,向他的员工出发dfs,每个点可以取,也可以不取,取:该点的原创 2017-08-14 15:44:14 · 213 阅读 · 0 评论 -
11149 Power of Matrix(矩阵快速幂)
题目网址点击打开链接矩阵快速幂 加一个公式;n为偶数时F(n)=F(n/2)*(E+A^(n/2))n为奇数是要再加A^n;原理的话展开证明省略;比如(E+A)*A=A+A^2;不过这个矩阵快速幂的方法跟原来普通数的不太一样(;不过也可以用原来那个板子,但是注意ans要赋值为Ema pow(ma a,int k){ ma ans;原创 2017-07-27 19:25:52 · 407 阅读 · 0 评论 -
UVA - 11732 (前缀树)
题目网址点击打开链接;这个题题意是这样的:就是给你字符串进行两两比对,看需要比多少次==,注意相等时==结果ans+=2,如果此位不相等 ans+=1,并且结束比较注意!!!所有的串的比较结束时要么两个不相等,要么至少一个到\0;但是wa点来(wsb)例 wsb wsb比较答案应该是8,而不是6 还需要比较最后一位的\0;竟无语凝噎,因为这,我死磕原创 2017-08-19 09:31:52 · 264 阅读 · 0 评论 -
UVA 818 Cutting Chains (暴力二级制枚举+dfs)
题目网址点击打开链接这个题有毒,题意大概意思应该是:选几个珠子去open。然后该珠子和其他就断开了。然后拿剩下的链去以这些open的珠子为点,去连接,看能不能连成一串。。求最少的open个数。思路:n为15.利用位运算去枚举哪几个珠子要open。然后判断剩下珠子有没有超过2个分支或者形成环,如果没有,在判断剩下的链个数有没有超过open个数-1.如果条件都符合,那么保留下最小最为答原创 2017-08-09 21:23:22 · 222 阅读 · 0 评论 -
UVA - 1601 The Morning after Halloween (bfs 单向/双向)
题目网址点击打开链接给出一个最大为16×16的迷宫图和至多3个ghost的起始位置和目标位置,求最少经过几轮移动可以使三个ghost都到达目标位置。每轮移动中,每个ghost可以走一步,也可以原地不动,需要注意的是任意两个ghost不能在相同的位置,因此也不能出现任意两个ghost对穿,也就是原来是ab,移动之后是ba。每个迷宫图'#'表示墙,' '表示空地,小写字母表示ghost的起始位原创 2017-08-09 18:43:42 · 285 阅读 · 0 评论 -
UVA - 1625(dp+预处理)
题目网址点击打开链接dp题目 Sample Input 2AAABBCYABBBCDEEYGBBYYRRGBSample Output1012dp[i][j] i和j表示上下两个串已经处理了多少个 ,i表示第一个串,j表示第二个每次拿去 i,j dp[i][j]=min(dp[i][j-1],d原创 2017-07-25 09:36:46 · 228 阅读 · 0 评论 -
UVA - 1619 Feel Good (延伸+滚动窗口) 蜜汁wa
题目网址点击打开链接;、对于某个最小值ai来说,所选的区间应该尽量大,直到再选就不能保证ai是最小值的时候停止。在扫描过程中维护一个向前延伸的最大位置,扩展的时候注意传递性,如果前面一个元素比它小,那么前面一个元素能延伸到的位置,当前元素也可以延伸到,然后类似链表往前找的同时延伸链即可。向后找的时候类似。区间和用一个前缀和来处理。ummmmmm这个题目有毒,明明原创 2017-08-08 19:48:29 · 199 阅读 · 0 评论 -
UVA--129 - Krypton Factor(神奇的if判别式引发的PE) 回溯
题目点击打开链接nm神奇的PEPE最后发现错误点居然是 if判别式&&的前后互换,没找到问题所在,只要将i放前面优先判断就是AC但是放后面就是pe,不太懂这是什么神奇的操作#include #include#include#includeusing namespace std;int c[30];int n,m,l;int cnt;int dfs原创 2017-06-25 12:28:24 · 178 阅读 · 0 评论 -
UVALIVE 3026 Period(kmp)
思路:KMP算法。还记得KMP算法中next数组的含义吗。假设next[i]=x,就表明字符串前i个字符的子串中前x个字符和后x个字符是完全相同的。对于一个周期串来说,假设它的长度是len,最小周期是p,那么它的前len-p个字符和后len-p个字符是完全相同的。那么我们只需要求一次next数组,就可以掌握字符串的所有前缀的周期情况了。这里的next的求法就是最原始的那种,没有优化原创 2017-07-11 00:19:38 · 166 阅读 · 0 评论 -
uva 1118(圆中三角形)
我一开始就是想着求三角形面积,根据三个点之间任意两个点与0点形成的三角形加减来求得;但是这样写是n3我以为不会超时,但是还是te了;后来发现了网上思路的升级版本(n2解决):画一个图看看在上图中。 我们假定要求 S(i,j,k) 如果k在 j的左侧 那么 S(i,j,k) = S(i,k,o)+s(i,j,o) - s(k,i,o); 显然 只要k在j的左原创 2017-08-23 16:17:20 · 319 阅读 · 0 评论 -
UVA - 11419 SAM I AM (最小点覆盖集)
题目网址点击打开链接关于这个题,首先思路是将每个行和列分开来看,即将列和行分为两个部分,两个部分之间的边就是题目中的炸弹,连接其所在的行和列。寻找最少的点可以覆盖所有的边,即是最小点覆盖集,在做这个题以前,首先要知道一下几点:1增广路:(引用)二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划原创 2017-08-27 21:54:07 · 435 阅读 · 0 评论 -
DAG动规 uva
题目网址s#include #include#include#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;const int maxt=2000+5;const int maxn=500+5;int dp[maxt][maxn];int ha原创 2017-08-21 17:07:01 · 304 阅读 · 0 评论 -
uva10755(容斥)
蓝书P56这个题目求前缀和的时候,利用了容斥的思想;后来求子长方体的时候也用了容斥的思想,并且用了一个数来保存当前出现过的同x同y的子长方体的体积,这样减少了一个数量级的运算;;#include <iostream>#include<algorithm>#include<cstdio>#include<string>#include<c...原创 2018-03-13 20:04:38 · 145 阅读 · 0 评论 -
uva1607
这题目有毒,一直没看懂。输入 case数,然后输入m (电路数) , 最左原始输入端总数。然后输入每个电路的输入端,如果是原始输入从上到下标号-1,-2 、、、、-n,后来产生的新的输入另加标号。与非门路,就是两个端子,先进行与运算,然后再进行非运算。解题思路点击打开链接;#include <iostream>#include<cstring>#include<c...转载 2018-03-05 20:36:16 · 447 阅读 · 0 评论 -
java大整数BigInteger
import java.util.*;import java.math.*;public class Main{ public static void main(String args[]){ Scanner cin = new Scanner(System.in); BigInteger a, b; //以文件EOF结束 ...原创 2018-03-01 23:01:57 · 163 阅读 · 0 评论 -
uva-1343 (IDA* ~)
有一个n天没刷题的傻子,,,,代码如下不多说。就是剪枝的深度有一点,我原来(maxd-d)*2<h,因为我觉得最多可以改变2个,但是TE了,关键在于,原来写的贼麻烦,而且最傻逼的在于输出cout<<"No moves needed"<<endl; cout<<s[ro[0]]<<endl;原来某傻逼是这样输出的cout&l...原创 2018-02-19 16:21:31 · 152 阅读 · 0 评论 -
uva116(代码写挫了)
思路很明确的一个题目,但是却在uva上wa了好多次,但是在hdu上过了,问题在于,hdu数据不全当列数为1 的时候,我原来的代码是会崩的,并且会错,幸好一开始错在RE才让我想到1的问题,要是一直wa,可能真的要找更久的bug了,这个细节,真的该好好反思一下错误代码 : 如何m==1的话,当j==m-1时,后面j==0是无法进入的,被continue掉了;样例:/*4 1原创 2018-01-29 18:17:23 · 261 阅读 · 1 评论 -
uva 1354
题目网址UVA - 1354;题目大意是在用长度为1的木棍和有重量的吊坠,组成满足要求的天平 (wa*la+wb*lb)关于思路是借鉴的网上的大佬的,这种二分枚举方法以前没有用过,用二级制来表示当前子集,该位为1表示该位属于当前子集,这样确定一个解答树;厉害的部分在于,将当前子集分开的部分,那个代码;for(int l=(x-1)&x; l>0; l=(l-1)&s原创 2018-01-28 20:28:43 · 246 阅读 · 0 评论 -
日记20180126(未发完)
一觉睡到了中午,期末成绩不太好,估计大家都能考95+吧,这次的题真的简单,我错了好几个傻逼题都90分。。。难受养了一只青蛙今天的基础题目,一道很久以前就该做的题目,正方体六个面涂色UVALive - 3401思路不难,就是找到所有的旋转方式打表然后处理就行了;我其实一直很喜欢用STL来做题,这一次写的很麻烦,我是把所有的颜色用string存好,然后把各种状态预处理出原创 2018-01-28 20:04:09 · 146 阅读 · 0 评论 -
uva1384(杨辉三角+卢卡斯)
杨辉三角:(a+b)的n次方 的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。1.题目描述:点击打开链接2.解题思路:本题要求计算C(n,0)...C(n,n)当中有多少个数不能被p整除。可以利用Lucas定理解决。通过Lucas定理,我们知道,如果C(n,m)不能被p整除,那么在n,m的p进制表示法中,每一个ni都满足ni>=mi,这样,每一位只有ni+1转载 2018-02-03 21:35:57 · 178 阅读 · 0 评论 -
uva12169(暴 || 扩展欧几里得)
题意:已知xi=(a*xi-1+b) mod 10001,且告诉你x1,x3.........x2*t-1,让你求出其偶数列一种暴力枚举a和b一种枚举a然后通过扩展欧几里得求b思路:枚举a,然后通过x1,x3求出b,再验证是否合适1.设a, b, c为任意整数。若方程ax+by=c的一组整数解为(x0,y0),则它的任意整数解都可以写成(x0+kb', y0-k转载 2018-02-03 22:01:54 · 201 阅读 · 0 评论 -
UVA_658It's not a Bug, it's a Feature! (二进制+隐式图最短路)
It's not a Bug, it's a Feature! ;UVA658Intput 3 31 000 00-1 00- 0-+2 0-- -++4 17 0-0+ ----0 0Sample OutputProduct 1Fastest sequence takes 8 sec原创 2017-11-23 18:11:30 · 228 阅读 · 0 评论 -
UVA 1600-- Patrol Robot (bfs)
这题。。 开始把题目看错了,k表示最大连续数,机器人最多连续通过k个障碍然后开始写,wa掉了一直wa 改不成功,这个的状态存储有点问题,对于连续障碍的更新有问题,并且有些障碍的位置不能只存储一次,存储一次会错的想不出来这种方法怎么修正,用一个dd[][] 去存储状态 当遇到下一个点为0是dd应该复原,但是值得注意的是,在for循环内部,dd应该是不变的,只是对应状态改变所以原创 2017-06-29 10:38:32 · 211 阅读 · 0 评论 -
UVA-816 Abbott's Revenge (bfs)
视频可算是做完了,可以敲题了gg 我改了一天的这个题目,心痛到无法呼吸;细节是挺麻烦的,但是思路是简单的,bfs 不过这个题目因为有方向,所以用了一个四维数组去存储这个点的状态是否存在,此点面朝z方向,向k方向是否可以行进;对于路径的存储,是比较有新意的地方,用一个p数组去存储当前点的根,然后开始倒回去进行寻找路径错误点1:dfs的初点应该是起点面向方原创 2017-06-28 22:43:45 · 364 阅读 · 0 评论 -
UVA------439 - Knight Moves(bfs简单)
伐开心,不会用bfs 网上的全都是一样的。。。。这个程序是错误的明明是一个简单的dfs。。。可能是我的dfs还是不好吧,等以后再改,,,后话:老哥我懂了! 这个题是bfs,,,,我真是个傻屌,如此简单错误程序:#include #includeusing namespace std;int dx[]={-2,-2,-1,-1,+1,+1,+2,+2}原创 2017-04-26 21:52:11 · 194 阅读 · 0 评论 -
1054 - Wine trading in Gergovia
哈#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #inc原创 2017-03-07 21:44:53 · 160 阅读 · 0 评论 -
UVA/8-1 120 - Stacks of Flapjacks
#include#include#include#include#includeusing namespace std;int n,a[55];void file(int p){ for(int i=0;2*i<p;i++)//此处不能是i<p/2 swap(a[i],a[p-i]); printf("%d ",n-p);}int main(原创 2017-03-07 21:39:32 · 187 阅读 · 0 评论 -
uva 524 - Prime Ring Problem
#include#include#includeusing namespace std;int n;int a[20],vis[20];int isp(int n) //判断是否为素数{ if(n2) return false; for (int i=2;i*i) { if(n % i == 0)转载 2017-03-04 13:57:20 · 202 阅读 · 0 评论 -
7-1 UVa 725 - Division
大神的码真巧 比我写的那个又臭又长的棒好多#include #include#includeusing namespace std;int n;int s[15];int judge(int a,int b){ int sum=0; memset(s,0,sizeof(s)); if(a<10000||b<10000)//如果小于则说明有0原创 2017-03-04 11:45:17 · 273 阅读 · 0 评论 -
679 Dropping Balls
题目地址https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=620这倒是一个简单的二叉树的问题,k节点调到左边为2*k节点右边为K*2+1;根据紫书上的提示#include#include#includeusing namespace std原创 2017-02-25 10:24:13 · 286 阅读 · 0 评论 -
12333 - Revenge of Fibonacci
题目:给你一个数字串,判断他是哪一个Fib数的前缀,有多种答案输出最小的,不存在输出-1。分析:字符串,大整数。 首先,利用大整数计算Fib的前100000项,由于数据较大,只储存前50位即可。 然后,按Fib的顺序存入字典树,利用滚动数组一边生成一边存储,可以减少内存开销。 在存的过程中直接转载 2017-02-25 10:18:49 · 171 阅读 · 0 评论 -
536 - Tree Recovery
#include#includevoid solve(char *pre, char *in, int n, char *post){ if (n <= 0) return; char *p = strchr(in, pre[0]); /// 用前序遍历的第一个元素来划分中序遍历以确定左右子树 solve(pre + 1, in, p - in, post); /// 左子树 so转载 2017-03-04 00:20:53 · 210 阅读 · 0 评论 -
839-Not so Mobile 不懂我需要再看
不懂 为何要w=w1+w2 这会对递归产生什么影响呢#includeusing namespace std;// 输入一个子天平,返回子天平是否平衡,参数W修改为子天平的总重量bool solve(int& W) { int W1, D1, W2, D2; bool b1 = true, b2 = true; cin >> W1 >> D1 >> W2 >> D2;原创 2017-03-03 20:39:57 · 212 阅读 · 0 评论 -
548-Tree 递归遍历
树的递归遍历先序遍历:T=T(根)+T(左)+T(右);中序遍历:T=T(左)+T(根)+T(右);后序遍历:T=T(左)+T(右)+T(根);以上遵循递归的运行方式每最深层返回值即对应 遍历哎,递归,,,,,表示不太懂,很难想到这里,,,看紫书debug才慢慢懂,心塞塞,再多看几次练几次应该就会好点吧,递归一直是弱项#include#includ原创 2017-03-01 22:00:33 · 226 阅读 · 0 评论 -
122 Trees on the level
一个二叉树的题;看的书上和网上的结合,用一个动态结构构造一棵树,比较麻烦,但好理解#include #include#includeusing namespace std;const int maxn=260;int ans[maxn];//用来装输出的数的结点值struct Node{ bool have_value;//是否被定义 int v;//结原创 2017-03-01 20:34:32 · 206 阅读 · 0 评论 -
10954 - Add All
型书上代码p245#include #include#includeusing namespace std;int main(){ int n,x; while(scanf("%d",&n)==1&&n) { priority_queue,greater > q; for(int i=0;i<n;i++)原创 2017-03-07 21:59:53 · 143 阅读 · 0 评论 -
uva/6-12 572 - Oil Deposits
油田两个以上相邻则说明属于一个油田#include#includeconst int maxn=1000+5;char tu[maxn][maxn]; //输入图的数组int m,n,idx[maxn][maxn]; //标记数组void dfs(int r,int c,int id){ if(r0||r>=m||c0||c>=n) return原创 2017-03-07 21:03:02 · 201 阅读 · 0 评论