- 博客(51)
- 收藏
- 关注
原创 背包问题模版
常用的三个模版。01背包无优化:for(int i=1;i<=n;i++)//n表示物品数量 { for(int j=0;j<=m;j++)//m表示规定体积/重量等等 { dp[i][j]=dp[i-1][j];//dp[i][j]表示前i个物品XX为j时最大xx if(j>=w[i])//w[i]表示第i个物品的XXX dp[i][j]=...
2018-05-10 20:49:58
138
原创 P1379 八数码问题
经典的bfs问题,将每个棋盘看成一个状态,从而转换为一个路径寻找问题。用取模找0的标号坐标,假设0的位置为nx=(n-1)/3+1, y=(n-1)%3+1;#include<iostream>#include<cstdio>#include<map>#include<set>#include<queue>#include...
2018-04-29 20:54:38
226
原创 UVa129 困难的串
输入依旧是坑。。。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int n,L;int cnt;int S[100];int dfs(int cur)//表示...
2018-04-28 23:38:10
213
原创 Uva524 素数环
素数打表,然后回溯搜索,输出格式真尼玛坑。。。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int prime[20];int vis[20];int ans[...
2018-04-28 21:32:38
168
原创 P1219 八皇后(经典回溯问题)
两种代码,第二种稍微快一点。。#include<iostream>#include<cstdio> using namespace std;int a[15];int Count=0;int n;void f(int cur){ if(cur==n){ Count++; if(Count<=3) { for(int k=0;k<n...
2018-04-28 20:32:19
349
原创 P1160 队列安排
刚做完紫书链表章节的移动盒子,正好用来练练手。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100000 + 10;int LL[maxn],RR[maxn];int n...
2018-04-28 00:52:53
166
原创 P1115 最大子段和
题目有几种做法,不过复杂度有区别,穷举On^3,前缀和On^2,分治Onlogn,dp On 。贴一个dp的。#include<iostream>#include<cstdio>using namespace std;const int maxn = 200000 + 10;int ans[maxn];int dp[maxn]={0};//dp[i]表示以i结尾最...
2018-04-27 22:21:51
312
原创 P1996 约瑟夫问题
手动写一个循环链表,算是复习了一遍吧。。被指针弄得烦死。#include<iostream>#include<cstdio>using namespace std;struct List{ int data; bool tag; List *next; List():data(0),tag(true),next(NULL){}};int n,m;int ...
2018-04-27 22:19:21
235
原创 UVa548 树
好多细节,自己的代码改了好多遍,最后改成源码。。。有时间再敲一遍。#include<iostream>#include<cstdio>#include<cstring>#include<sstream>using namespace std;const int maxn = 10000 + 10; int in_order[maxn],p...
2018-04-26 21:23:15
157
原创 UVa122 树的层序遍历
重新复习了下树的遍历,我是直接在主函数先写了一次遍历的代码,然后改成无限次遍历但最后不是以文件结束,但题目要求是以文件结束,因为不是做工程,也懒得改成函数了,在读写字符串的时候判断一下EOF,直接return 0。输出也是坑,最后一个元素输出还不能有空格。。。整理下出错的地方:1、新建结点时应该新建指针,node*类型的。2、必须写构造函数并且赋值空指针NULL,要不就初始化的时候直接NULL,不...
2018-04-26 00:09:22
132
原创 UVa 514 Rails
坑死了,一个低级错误找了好久,每次操作都应该新建一个栈,而我都是用的一个栈。。。#include<iostream>#include<cstdio>#include<stack>#include<algorithm>using namespace std;const int maxn = 1000 + 10; int n;int an...
2018-04-25 00:26:00
151
原创 高精度模版
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100000;struct bn{ int bt[maxn],len;//bt[0]存符号位 0为正,1为负 void...
2018-04-23 23:18:49
101
原创 UVa 156反片语
#include<iostream>#include<cstdio>#include<cctype>#include<set>#include<map>#include<cstring>#include<algorithm>#include<vector>using na
2018-04-23 18:23:30
145
原创 16蓝桥杯 一步之遥
明明用扩欧甚至穷举都可以一下出结果,我却搜索了半天。。。#include<iostream>#include<cstdio>using namespace std;void ex_gcd(int a,int b,int& d,int& x,int& y){ if(!b){ d=a;x=1;y=0; } else{ ex_gcd(...
2018-04-22 20:59:00
299
原创 16蓝桥杯决赛 凑平方数
用全排列直接搜索,可行的结果放到set里面判重,注意一下用long long就行了。#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>#include<set>#include<cstdli...
2018-04-22 19:59:01
238
原创 17蓝桥杯决赛 磁砖样式
用dfs搜索回溯模拟铺砖块,按从左到右,从上到下铺,n表示铺第几块砖,然后取模转化为x,y表示坐标。 初始化-1,用1,0分别表示一种颜色,每个点要不铺1,要不铺0(必须铺砖的两个点都为-1),不能铺返回上个点,铺过了的直接到下一个点 最后判重(也可以在铺的时候判断,花的时间更少,因为是填空题就算了)答案105760 刚开始想,初始化0,用1表示一种颜色,每个点可以横铺1,竖铺1,或者不铺三种情况...
2018-04-18 20:32:58
307
原创 17蓝桥杯决赛 对局匹配
dp问题先转换为权值数据,把权值数据化为K组(K1,K2……)数据每一组数据相当于k等于1的子问题。 最后将最后k个加起来就是答案。比如说样例21 21 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6转化为权值数据为1 2 3 4 5 6分成两组1 3 5 k12 4 6 k2k1子问题的答案是1+5=6k2子问题的答案是2+6=8最后问题的答案就是14。#in...
2018-04-16 19:22:07
403
原创 17蓝桥杯决赛 发现环
无向图找环。用dfs来搜索环,两个参数,dfs(x,y),x表示当前点的位置,y表示前驱位置然后搜除了前驱位置的点(也就是不回走,将有向图转为无向图),每走一个点给布尔数组赋1,直到搜到重复的点,说明发现了环。值得注意的时, 搜完有两种情况,起点在环上,起点不在环上。当起点不在环上,再用一个dfs将起点与环节点(除了record)中间的所有布尔数组赋0。最后输出布尔数组就好了。 #include&...
2018-04-11 20:28:16
1170
1
原创 蓝桥杯 买不到的数目
动态规划,当可以被凑出来的数的连续个数等于最小的那个a时,之后所有的数都可以被凑出。与凑包子那题一样。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int ans[100000];int a,b;int ...
2018-03-31 21:16:01
485
2
原创 蓝桥杯 剪格子
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int ans[15][15];int ok[15][15];int Min=100000;int Count=0;int n,m;int sum=0;...
2018-03-31 20:42:52
135
原创 欧几里得算法求最大公约数和最小公倍数
求多个最大公约数 直接叠加即可比如求三个数的最大公约数,先把前两个数的最大公约数求出来,再把这个数与第三个数求最大公约数。多个数同理。两个数的乘积等于这两个数的最大公约数和最小公倍数的成绩,所以最大公倍数直接拿两个数乘积除以最小公约数就好了。多个数同理。#include<iostream>#include<cstdio>int gcd(int a,int b)//欧几里...
2018-03-31 19:58:18
487
原创 17蓝桥杯 方格分割
这题搜边更好做,从4,4点开始搜,每走一步中心对称的那个也标记走过,直到走到边界,最后结果除以4#include<iostream>#include<cstdio>#include<cstring> int ans[10][10];int Count=0;void dfs(int x,int y){ ans[x][y]=1;//标记已走 ans[...
2018-03-31 17:52:59
180
原创 17蓝桥杯 迷宫
直接dfs,走到边界就+1把字母转换为数字 输入方便#include<iostream>#include<cstdio>#include<cstring>using namespace std;int ans[20][20];int ok[20][20];int Count=0;void dfs(int x,int y){ ok[x][y]=0...
2018-03-31 15:30:36
205
原创 16蓝桥杯剪邮票
先用全排列选出5张邮票,然后再判断是不是连通图就好了。 dfs和bfs都可以做 #include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<cstring>using namespace std;int ans[12]={0,0,0,...
2018-03-30 20:31:19
139
原创 17蓝桥杯 包子凑数
扩展欧几里德算法,如果给定n种蒸笼的最大公约数不等于1,那么就有无限多个否则算出不能凑出的数量。dp布尔数组,dp[i]表示i能不能被凑出,能赋值1,不能赋值0。先把初始的蒸笼数全部赋值1,然后从dp[1]开始找,一直到10010(假设边界不超过这个数)。 如果dp[i]不能被凑出,那么直接计数+1如果能凑出,那么将dp[i]的i加上n个蒸笼的数赋值1,也就是将dp[ans[0]]~dp[ans[...
2018-03-26 20:37:20
136
原创 17蓝桥杯 分巧克力
//二分答案 #include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,k,l,r,ans;struct cho{ int x,y;};cho c[100010];int judge(int x){ int tot=0;//表示以x为边长的巧...
2018-03-25 21:18:09
110
原创 17蓝桥杯 日期问题
我的做法是,先把三种表示法都写出来,再判断合不合法,用然后放入set集合里面去重排序,另外闰年的29号合法,需要另外判断 ,合法就输出,注意如果两种表示法表示的一样,只输出一个,比如02/02/29,只输出2029-02-02。#include<iostream>#include<cstdio>#include<cstring>#include<al...
2018-03-25 20:53:45
142
原创 14蓝桥杯 地宫取宝
使用一个四维数组来进行记忆化dfsx,y表示坐标,z表示当前已拿物品,Max表示当前拿到的最大价值物品那么ok[x][y][z][Max]表示 在点(x,y)处拿了z个物品最大价值为Max这个状态 到 点(n,m)处拿了k物品 这个状态有多少条走法。其中在初始位置拿的最大价值应该是-1,因为后面会有0价值的物品。判出递归边界有两个情况。情况1:不拿最后一个物品就已经有k个物品了情况2:可以拿最后一...
2018-03-24 19:38:35
129
原创 14蓝桥杯 蚂蚁感冒
贪心法先将所有蚂蚁位置按绝对值排序,并记录第一只蚂蚁所在的位置(数组中的位置) 两只蚂蚁碰面后方向调换,其实和不调换一样,题目只是计数,并没有要求记录哪些蚂蚁感冒了所以,有两种情况。 情况1,第一只感冒蚂蚁朝向的那方没有一只与它方向相反的蚂蚁,输出1。 情况2,有的话,将感冒蚂蚁朝向那方所有与它方向相反的蚂蚁计数,并且将感冒蚂蚁背后与它同向的蚂蚁也计数。 将上述两种情况,左右方向各写一次,便可求出...
2018-03-22 08:54:46
119
原创 13蓝桥杯 连号区间
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int ans[100010];int n,Count=0;int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",...
2018-03-21 20:43:53
151
原创 13蓝桥杯 带分数
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int ans[9]={1,2,3,4,5,6,7,8,9};//把所有排列弄出来 int Count=0;int main(){ int n; scanf("%d",&n); do{ ...
2018-03-21 19:57:44
132
原创 13年蓝桥杯 翻硬币
贪心法 先将字符串转换为布尔数组01然后从第一个开始比较,如果不同就翻相邻的两个硬币并计数+1 直到结束,一定是最少翻的 #include<iostream>#include<cstdio>#include<cstring> char str1[1005];char str2[1005];int ans1[1005];int ans2[1005];...
2018-03-20 21:20:26
317
原创 洛谷 P1316 丢瓶盖
二分答案#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int ans[100010];int a,b,l=100000000,r,n;bool judge(int x)// { int now=ans[1],tot=1; for(int i=2;...
2018-03-20 19:41:29
118
原创 洛谷 P1308 统计单词数
#include<iostream>#include<cstdio>#include<cstring> using namespace std;char str1[11];char str2[1000010];int Count=0,first=-1;int main(){ gets(str1); gets(str2); int len1=...
2018-03-20 19:33:16
403
原创 P1135 奇怪的电梯
#include<iostream>#include<cstdio>#include<queue>using namespace std;int n,a,b;int ans[210];int ok[210]={0};int bfs(int x)//x为当前楼层 { queue<int> q; q.push(x); while(!...
2018-03-19 21:00:32
208
原创 P1182 数列分段Section II
二分答案确定左边界和右边界后找中间值,验证该值是不是不满足要找到满足中最小的那个(不如说是找到不能满足的最大的那个+1)主要是怎么写好judge函数。将数列在保证分段和不超过mid的情况下 尽可能使得段数最少如果最少段数超过了m,说明满足最大值最小的(ans)一定比该二分答案大,也就是说mid不满足转而找右边的二分点如果没超过m,说明最大值最小的(ans)小于或等于mid,也就是说mid可能是最终...
2018-03-19 20:19:38
851
原创 洛谷P1057 传球游戏
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n;//记忆化搜索 int ans[33][33]; int f(int x,int y)//当前位置和 剩余次数 { if(y==0){ if(x==0)return ans[0][0]=1...
2018-03-18 19:32:46
226
原创 洛谷P1025 数的划分
和放苹果类似,将程序记忆化搜索#include<iostream>#include<cstdio>#include<cstring>using namespace std;int ans[210][8];//记忆化搜索 int f(int n,int k){ if(n<k)return f(n,n); if(n==0)return ans[...
2018-03-18 19:00:03
154
原创 洛谷 P1029 最大公约数和最小公倍数问题
假设p=x0*k1,q=x0*k2;k1与k2一定互质,如果不互质就存在更大的最大公约数 又因为两个数的乘积等于他们的最大公约数和最小公倍数的乘积 所以p*q=x0*x0*k1*k2=x0*y0即y0=x0*k1*k2将y0/x0,如果除不尽说明不存在这样的p与q除尽了,至少有两对pq组合。然后从x0到sqrt(y0/x0)穷举,得出两个数k1,k2,若k1与k2互质,说明又是两对。 #inclu...
2018-03-17 20:41:21
508
原创 洛谷 P1010 幂次方
//使用分治的思想,先将n化为二进制倒序(直接放里面存相当于倒着存)存放入字符数组//然后利用递归 将每一位是1的下标放入dfs()再进行一次转换//当循环到位数位二进制倒数第二位且有效时直接输出2//当循环到位数位二进制倒数第一位且有效时直接输出2(0)//除了第一位不放+号以外,其他只要不是0的项都放+号 #include<iostream>#include<c...
2018-03-16 20:51:55
195
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人