自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 UVA 10795 新汉诺塔问题(递归)

题目:https://vjudge.net/problem/UVA-10795新汉诺塔问题往旧汉诺塔问题上转换,所以先来看旧汉诺塔问题。旧汉诺塔:汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在...

2019-12-30 19:51:45 287

原创 LA 3401 彩色的立方体(暴力+打表)

题目:https://vjudge.net/problem/UVALive-3401学习了如何用机器人中的术语“姿态”,来解决这个问题。一个正方体6个面,当为每个面标上号的时候,这个正方体就有了24种姿态,即每个面作为顶面,每个面作为顶面的时候有4种不同的情况。这样颜色在不同姿态上的正方体的情况可以看做是互不相同的了。这道题的实现比较复杂,而且用到了很多技巧。此外,一定要搞...

2019-12-29 20:35:55 294

原创 UVA 2995立方体成像(Image is Everything)

题目:https://vjudge.net/problem/UVALive-2995LRJ的方法妙,代码写的更妙..通过控制深度,从一个面就可以搜索到立方体的任意位置。运用的思想是观察到的颜色是否和实际的立方块颜色矛盾不矛盾他的代码是这么建系的:#include<cstdio>#include<cstring>#include<cmath&g...

2019-12-28 15:06:11 214 1

原创 UVA 10881 蚂蚁(Piotr's Ants)

学到了如何用order数组把蚂蚁的顺序按照输入的顺序输出,用order[i]表示第i个编号的蚂蚁从左到右的位置。#include<bits/stdc++.h>#define maxn 10005using namespace std;char dir[3][10]={"L","Turning","R"};struct Ant{ int id; //编号 int ...

2019-12-28 10:05:27 133

原创 LA 3708 墓地雕塑(扩展思维)

我们假设插入m个雕塑后,圆周总长为n+m,这样既每个雕塑之间相隔距离为1.在这样n+m长度里先求出除起始雕塑外每个雕塑的坐标,然后分别找到离他最近的点。此外用floor函数解决了四舍五入问题,并且两个雕塑是不可能找到同一个最近点的,因为n+m时候距离才为1,只有n个得时候两者之间距离会更大。#include<stdio.h>#include<math.h&gt...

2019-12-27 16:17:47 176

原创 UVA 580 危险的组合(数论—计数原理)

题目链接:https://vjudge.net/problem/UVA-580设答案为f(n),以3个U为分类依据,让i,i+1,i+2成为3个U,这样i前面的可以不需要3个U,但是有一个问题,如果前i-1为U,那么i-1,i,i+1还是可以组成3个U,这样就不符合从第i个开始为至少3个U了,所以我们要剔除掉这种情况,可以强制让i-1为L,这样把i-1前面的可排列数量和i+2后面的可排列数量相...

2019-12-26 11:25:03 197

原创 UVA 1608 不无聊的序列(中途相遇思想+递归)

题目:https://vjudge.net/problem/UVA-1608用滑动窗口的方法把每个不唯一的数的左边和右边挑出来,这样就能找出唯一的数。加速思想:普通的从左往右遍历会超时,所以选择左右同时进行遍历,次时最坏的情况是唯一元素在中间,相当于把每次查找缩小了一半,若要查找n个数,那么时间复杂度为(n*logn),大大减小了查找时间。#include<bits/std...

2019-12-25 19:02:01 117

原创 UVA 12174 Shuffle的播放记录(滑动窗口)

自己实现的时候很多细节一直处理不好,最后看了看别人的。思路:对于前s首歌,分别对于每一首歌,看能否以它为首进行新的排序,对于每个滑动窗口,增加了一个数组,判断每个数在窗口中出现的次数,相当于set集。用temp记录在一个滑动窗口中,是否有重复元素。#include <stdio.h>#include <string.h>#include <algo...

2019-12-25 15:54:27 148

原创 UVA 714 抄书(二分法+贪心)

题目:https://vjudge.net/problem/UVA-714用二分的思想,去求满足划分区间的最小值,类似于lower_bound的实现,输出时候,从后往前推,使得后面的先满足条件,这样可以使前面划分的区域装的数尽可能小。#include<bits/stdc++.h>long long a[510],sum[510];bool is[510];int ...

2019-12-24 20:52:09 167 2

原创 UVA 11572 唯一的雪花(滑动窗口)

可以用set或者map来实现1.用set,把每个唯一元素进入集合,扩展右边界,直到发现有不唯一的元素,从左边开始删除元素,直到集合中无该元素#include<bits/stdc++.h>using namespace std;int a[1000000];set<int> s;int main(){ int n; scanf("%d",&n...

2019-12-24 10:30:54 107

原创 UVA 11134 传说中的车(区间贪心)

题目链接:https://vjudge.net/problem/UVA-11134本题采用贪心法,每次选择对区间影响性最小的位置。如果相同影响的情况下,优先选择小区间。#include<bits/stdc++.h>using namespace std;int visr[5005];int visc[5005];struct Car{ int id,ans; ...

2019-12-23 18:14:41 104

原创 循环日程表问题(递归与分治)

设有n=2^k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能参赛一次;(3)循环赛在n-1天内结束。请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤i≤n,1≤j≤n-1。8个选手的比...

2019-12-23 09:28:43 980

原创 棋盘覆盖问题(递归与分治)

棋盘覆盖问题。有一个2k∗2k2k∗2k的方格棋盘,恰有一个方格是黑色的,其他为白色。你的任务是用包含3个方格的L型牌覆盖所有白色方格。黑色方格不能被覆盖,且任意一个白色方格不能同时被两个或更多牌覆盖。如图所示为L型牌的4种旋转方式。 当一个黑块位于某一角时,可以解决一个边长为2的正方形匹配。可是这样只解决了一个正方形,想解决其他正方形,需要为其他每个正方形在某一角增加一个黑块,然后该问...

2019-12-22 20:48:39 558

原创 UVA 1220 Hali-Bula的晚会(树形dp)

一道细节满满的题,找了一晚上错终于AC了本题几乎就是树的最大独立子集问题,但是多了一个要求,判断唯一性。那么如何判断唯一性呢,这个唯一性充满了细节。1.如果两个情况相等:如果选了或者不选以该结点为根的子树,得到的结果一样,那么一定不唯一。2.如果一种情况大于另一种情况:如果以该节点为根的子树大于不以该节点为根的子树,我们要判断一下是否以该节点为根的子树是唯一的,如果不是...

2019-12-20 21:19:45 101

原创 UVA 12186 工人的请愿书(树形DP)

本题的收获:每个结点深搜后,可以设置一些条件使之达到对于想要返回的结果。#include<bits/stdc++.h>using namespace std;vector<int> g[100005];vector<int> d[100005];bool cmp(int a,int b){ return a<b; }int T...

2019-12-20 15:47:41 122

原创 树上的动态规划总结(树型dp)

要想熟练的掌握树的动态规划的方法,必须先从模型入手。树型dp讲究对于一个无向图,先以随机一点为根,建立以该点的树。无根树转有根树方法原理:以该根进行dfs,把搜索到的每一个点的父亲设置为该根,直到所有点有相应的父节点。实现:void dfs(int u,int fa){ for(int i=0;i<g[u].size();i++){ int v=g[u][i];...

2019-12-20 10:09:47 324

原创 UVA 1262 密码(暴力求解)

题目链接:https://vjudge.net/problem/UVA-1262直接暴力搜索,直到找到匹配的字符串#include<bits/stdc++.h>using namespace std;int k;vector<char> v[10];int vis[6][30];deque<int> q;int num;void pr...

2019-12-19 10:42:23 98 1

原创 欧拉函数phi(数论)

小于n且与n互素(即两个数最大公约数为1)的整数个数,由唯一分解定理可知,从总数n中减去是p1...pn的倍数的个数即可,此过程用到了容斥定理。容斥定理的证明自己查去..欧拉函数:φ(n)=n(1-1/p1)(1-1/p2)...(1-1/pk)这个函数非常的好用若是针对某一个数n,求他的欧拉函数int main(){ int n; scanf("%d",&n...

2019-12-18 20:16:54 1305

原创 计数基础

有重复元素的全排列:有k个元素,其中第i个元素有ni个,求全排列个数。分析:令所有ni之和为n,再设答案为x。首先做全排列,然后把所有元素编号,其中第s种元素编号为1~ns。这样做以后,由于编号后所有元素均不相同,方案总数为n的全排列为n!根据乘法原理 n1!n2!n3!...nk!x=n!求x。可以想成每个ni!为该种排列位置上的不同编号的方案,但是因为实际上都是同一种...

2019-12-18 00:21:00 164

原创 UVA 10375 选择与除法(唯一分解定理)

该方法使得最后统一算出结果,不用担心中间过程溢出。#include<bits/stdc++.h>using namespace std;vector<int> primes;int vis[10005];int e[10000];void add_integer(int n,int d);void add_factorial(int n,int d){...

2019-12-17 19:57:31 110

原创 UVA 12169 不爽的裁判(模算术)

一看就知道是扩展欧几里得,一用就废..看了看别人的..说下思路吧,x2 = (a * x1 + b) % 10001;x3= (a * x2 + b) % 10001;联立2个式子x3 = (a * (a * x1 + b) % 10001 + b ) % 10001;x3 = (a * (a * x1 + b) + b) % 10001;所以x3+10001k=...

2019-12-17 15:53:20 110

原创 UVA 11582 巨大的斐波那契数!

因为数太大一定会溢出,所以找规律,发现最多n²会出现重复。先计算出一个周期里的,所有满足f(a的b次幂)处以n的余数,接下来就是匹配,让a的次幂匹配到这个周期里对应的下标,把含有该下标的除以n的余数输出。注意unsigned long long 不要在while循环里写,不然会栈溢出。此外通过此题,还学会了如何用位运算求a的b次幂。if(b&1){ ...

2019-12-17 10:56:57 148

原创 扩展欧几里得算法

首先来看欧几里得的优美写法:int gcd(int a,int b){ return b==0 ? a:gcd(b,a%b);}扩展欧几里得,用来求直线上的点,如求直线ax+by+c=0上有多少个整点(x,y)满足x∈[x1,x2],y∈[y1,y2].首先学习扩展欧几里得,找出一对整数(x,y),使得ax+by=gcd(a,b).注意,这里的x和y不一定为正数。...

2019-12-16 20:26:21 97 1

原创 Eratosthenes筛法找区间无平方因子的数

筛选的思想:对于不超过n的每个数p,删除2p,3p,4p....当处理完所有数后,还没有被删除的数就是素数。比如要筛选区间(n,m)的无平方因子数,对于不超过根号m的所有素数p,筛掉区间(n,m)内p²的所有倍数。首先来找素数,vis[i]表示被删除的数,vis[i]=1表示已经被删除。筛选方法为: int n,m,c=0; scanf("%d %d",&n,...

2019-12-16 17:21:38 162

原创 Uva 1626 括号序列(区间动态规划)

不会..看了看别人写的先把d[i][j]看成是一个整体,如果最外面那层括号是对称的,那么这串字符所需要增加的就是里面的,所以可以从d[i][j]转移为[i+1][j-1],再把d[i][j]看出是拼接的字符串,d[i][j]=d[i][k]+d[k][j],比较整体的和拼接的哪种需要增加的括号更少,这道题在循环中,包含了两个意义的转移方程,此外,打印答案时也不是很好想#include&lt...

2019-12-16 16:06:30 157

原创 切木棍(区间模型动态规划)

题目链接https://vjudge.net/problem/UVA-10003d[i][j]表示在i到j这一段上切一刀的最小权和,如果没有切过就为0。状态转移方程为ans(i,j)=min{ans(i,k)+ans(k)(j) | i<k<j } +d[j]-d[i]#include<bits/stdc++.h>#include<algo...

2019-12-15 09:31:27 238

原创 蓝桥杯2019 第4题 迷宫

试题 E:迷宫本题总分:15 分【问题描述】下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。010000000100001001110000迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。对于上面的迷宫,从入口开始,可以按DRRURRD...

2019-12-09 13:42:02 167 1

原创 最优三角剖分

一个多边形,分成若干个三角形,使得权和最小。先给这个多边形逆时针编号,接下来考虑是动态规划的想法,假如i为起点,i-1为终点,那么i,i-1必然在一个三角形内,唯一不确定的就是另一个顶点k,接下来考虑k的位置,这就相当于把多边形分成了两个部分,一个部分为i到k,另一个部分为k到i-1,所以这两个部分,必须也为最小才可以,这么一直分下去...接下来由0到i-1依次对每个点构造3边形,4边...

2019-12-08 10:07:07 252 2

原创 uva 11584 划分成回文串

d[i][j]表示从第字符串的第i个到第j个是否为回文串。状态转移:dp[0][i]=min(dp[0][i],dp[0][j-1]+d[j][i]); 表示从0到第i个字符的长度中,包含的最小个数的回文串,当然这个也可以写成滚动数组的形式。#include<bits/stdc++.h>using namespace std;char s[1005];int ...

2019-12-06 13:53:12 92 1

原创 抽象类与接口的比较

1.抽象类和接口都可以有抽象方法。2.接口中只可以有常量,不能有变量3.抽象类中也可以有非抽象方法,但是接口只能有抽象方法。那什么时候选择不同的方式呢如果某个问题的需要使用继承才能更好的解决,如子类除了需要实现父类的抽象方法,还需要从父类继承一些变量或继承一些重要的非抽象方法,就可以考虑用抽象类,如果某个问题不需要继承,只需要实现一些重要方法的细节,就可以用接口。...

2019-12-06 00:03:10 70

原创 最长公共子序列(LCS)

用dp[i][j]表示长度为i的序列和j的序列的最长公共子序列,接下来,状态转移很不好想,我理解了3个小时才搞懂,假若a1[i]==a2[j]也就是说序列a1的最后一个数和序列a2的最后一个数相等, 这种情况下dp[i][j]=dp[i-1][j-1]+1,如果序列a1的最后一个数不等于序列a2的最后一个数,那么最长公共序列肯定不包括这两个序列里面其中一个最后一个数,这时候就看可以扔掉谁了,假若...

2019-12-04 21:53:42 134

原创 最长上升子序列(LIS)

先用数组a记录输入的序列,dp[i]表示a[i]的最长上升序列,每次找到一个i时,找到i前面比i小的最大的上升子序列,在它的基础上+1.以下代码的时间复杂度为O(N^2),还有一种O(nlogn)的优化方法,以后发…#include<bits/stdc++.h>#define maxn 1000using namespace std;int dp[maxn]; ...

2019-12-04 21:45:46 74

原创 UVA 12563 劲歌金曲(滚动数组)

这道题练习了滚动数组,不过跟0-1背包问题有点不同,为了记录准确时间,通过设置条件把无用状态剔出来,消除了错误时间,f[i]表示i时,唱了多少首歌。#include<bits/stdc++.h>#define max1 9700using namespace std;int f[max1];int ans[max1];int main(){int n;scanf("%...

2019-12-04 09:57:32 115

原创 关于0-1背包问题

有n种物品,每种只有一个,第一种物品的体积为Vi,重量为Wi。选一些物品装到一个容量为C的背包,使得背包内物品在总体积不超过C的前提下重量尽量大。//剩余体积作为状态 for(int i=n;i>=1;i--) for(int j=0;j<=C;j++){ d[i][j]==(i==n?0:d[i+1][j]); if(j>=V[i]) d[i][j]=max(d[...

2019-12-03 09:25:52 77

原创 UVA 116 单向TSP

对于可变行的排序不太好想,学到了新的排序思路,这题用逆推比较容易记录每列的行序号。#include<bits/stdc++.h>#define inf 0x3f3f3f3fusing namespace std;int g[105][105];int d[105][105];int next1[105][105];int ans;int first;void dp(...

2019-12-02 13:52:08 68

原创 UVA 1347 旅行 (记忆化搜索)

折返问题,可以考虑正向分成两路,两个点中较大的点放到数组第二位,每次转移要么是j到j+1,要么是i到j+1。做的时候一定要想清楚dp数组表示的含义,本来一开始想着表示起点到现在两点的距离,结果做完才发现我的dp数组表示的是结尾点到现在两点的距离#include<bits/stdc++.h>using namespace std;struct Node{int x,y; }...

2019-12-01 17:38:51 77

原创 UVA 437 巴比伦塔(DAG模型)

用d[idx,k]来储存每个立方体,idx表示立方体的序号,k表示高,可以自定义一个结构体来储存长和宽。#include<bits/stdc++.h>using namespace std;int height[35][3];int dp[35][3];int p[3];struct retangle{int a,b;bool operator < (co...

2019-12-01 09:44:37 131

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除