自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Beaver's Calculator 1.0(分层的快速排序)

AC代码#include#includeusing namespace std;struct type{long x,y,z;}p[300000];bool cmp(type x,type y){ if (x.x==y.x) return (x.y<y.y || (x.y==y.y && x.z<y.z)); else return x.x<y.x;}

2017-04-10 20:23:53 308 1

原创 贪心

贪心就是遵循某种规则,不断贪心的选取当前最优策略的算法设计方法。本节通过几个经典贪心问题的展示来介绍贪心贪心算法就是遵循某种规则,不断地选取当前最优策略1.银币问题const int V[6]={1,5,10,50,100,500};int C[6];int A;void solve(){ int ans=0; for(int i=5;i>=0;i

2017-04-10 20:12:55 222

原创 蓝桥杯 操作格子(线段树例题)

http://www.tudou.com/programs/view/ek_xh3IaBWw/?qq-pf-to=pcqq.group线段树视频讲解http://blog.csdn.net/x314542916/article/details/7837276博客讲解#includeint Testmax(int a,int b)//判断大小的函数{return a>b?a:

2017-04-08 23:13:38 330

原创 蓝桥杯模拟题还款计算

这题一开始觉得并不复杂,想着double可以自动四舍五入不用太操心,结果经过这一题我才知道原来浮点数的四舍五入不稳定#include#includeusing namespace std;double sw(double x){ int y=(x+0.005)*100; return y/100.0;}int main(){ double r; i

2017-04-06 22:25:48 337

原创 蓝桥杯最小生成树

这道题第一遍的时候不知道结点如何处理,后来画了图自己走一遍就发现可以吧边权设为l=2*l+x+y;#include#include#includeusing namespace std;struct Node{ int x,y,l;}Edge[100000+5];bool cmp(const Node a,const Node b){ return a.l<b.

2017-04-05 17:21:30 398

原创 蓝桥杯算法练习最短路(spfa)

spfa算法详解http://www.360doc.com/content/13/1208/22/14357424_335569176.shtml代码详解#include#include#include#includeusing namespace std;#define inf 999999999typedef struct minx{ int a,d;}

2017-04-04 12:13:08 268

原创 整型与字符型之间的转换

int转string#include#include#includeusing namespace std;int main(){ stringstream stream; string result; long long i=1000000000000000000; stream<<i; //将int输入流 stream>>result;

2017-04-01 09:09:45 614

原创 关于字符串的读取

一、scanf("%s",str);遇到空格或者换行就停止二、cin>>str;遇到空格或者换行就停止三、gets(str);遇到换行就停止四、getline(cin,str);#include#include#includeusing namespace std;int main(){ string line; while(getli

2017-04-01 08:48:56 459

原创 动态规划

例题一、数字三角形在上面的数字三角形中寻找一条从顶部到底部的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或者右下走,只需要求出最大的和,不必给出具体路径结题思路:用二维数组存放数字三角形D(r,j):第r行第j个数字MaxSum(r,j):从D(r,j)到底边的个路径中最佳路径的数字之和问题:求MaxSum(1,1)典型的递归问题D(r,j)出发

2017-03-26 08:57:29 262

原创 蓝桥杯2014省赛

标题1:啤酒和饮料     啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。     我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。#include#includeint main(){ int i,j; double sum=0; for(i=1;i<41;i++)//啤酒 {

2017-03-21 17:37:36 263

原创 蓝桥杯2015省赛

1.方程整数解方程: a^2 + b^2 + c^2 = 1000(或参见【图1.jpg】)这个方程有整数解吗?有:a,b,c=6,8,30 就是一组解。你能算出另一组合适的解吗?请填写该解中最小的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。这道题枚举就可以了,不过不知道题目是啥意思2.星系炸弹get到了Excel的一个新

2017-03-19 16:12:35 644

转载 垒骰子与矩阵快速幂

转自 http://blog.csdn.net/lonverce/article/details/45169285垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组

2017-03-19 15:35:15 433

原创 深搜与广搜以及例题

做题目的时候,遇见了两个类型十分相似的题目,可以一个直接输出最短的步数,一个要保存,,这个就很犯难然后通过这两题,有重新了解了一个BFS与DFS的区别一、路径的输出1.dfsDFS其实就是一直顺着一个方向不断的搜索知道找到了目标为止。路径输出的时候,利用记录前面的点即可#include#include#include#includeusing namespace std

2017-03-18 21:44:56 500

原创 蓝桥杯2016练习

1.结果填空网友年龄某君新认识一网友。当问及年龄时,他的网友说:“我的年龄是个2位数,我比儿子大27岁,如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”请你计算:网友的年龄一共有多少种可能情况?提示:30岁就是其中一种可能哦.请填写表示可能情况的种数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字

2017-03-07 22:08:01 282

原创 第一周训练 E题

Description函数 f:Z+→Zf:Z+→Z。已知 f(1),f(2)f(1),f(2) 的值,且对于任意 x>1x>1,有 f(x+1)=f(x)+f(x−1)+sin(πx2)f(x+1)=f(x)+f(x−1)+sin⁡(πx2)。求 f(n)f(n) 的值。Input多组数据。(数据组数 T≤100T≤100)每组数据包含 33 个不

2017-03-06 16:25:55 178

原创 各种输入的总结

一、gets()与scanf读取字符串的区别1.截止字符不同。gets函数固定的以换行符作为结尾,遇到换行符时结束输入。scanf函数默认以空白函数结尾,同时可以对截止函数进行修改,以空格和换行截止。2.对截止字符处理不同。gets函数会读入截止字符\n, 同时将\n自动替换为\0.scanf遇到截止字符时不会继续读取,截止字符将存储于输入缓冲中,若想消除回车,要加一个getchar()。

2017-03-05 10:31:41 198

原创 并查集学习有例题

Problem Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?  Input测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000

2017-03-03 18:26:05 276

原创 sort的升级

1.vector中应用sortsort(v.begin(),v.end());2.改变排序的顺序bool comp(const int &a,const int &b){ return a>b;}sort(v.begin(),v.end(),comp);3.结构体排序struct ss{ int a,b;};bool comp(const ss &a

2017-03-03 17:27:17 200

原创 STL用法总结

lower_boundlower_bound的作用是查找“大于或者等于x的第一个位置”【用法】 int p=lower_bound(a,a+n,x)-a'不定长数组:vector【用法】vectora,vectora;定义一个不定长的数组a.size()  读取大小a.resize()  改变大小a.push_back()  向尾部添加元素a.pop

2017-03-03 15:27:09 156

原创 11.2最小生成树

11.2.1kruskal算法第一步,是给所有边从小到大的顺序排列。这一步可以直接使用qsort,sort,接下来依次考查每条边(u,v)情况1:u和v在同一个连通分量中,那么加入(u,v)后会形成环,因此不能选择情况2:如果u和v在不同的连通分量,那么加入(u,v)一定是最优的最关键的部分在于“连通分量的查询与合并”:需要知道任意两个点是否在同一个连通分量中,还需要合并两个连通分

2017-02-20 15:43:34 251

原创 11.1再谈树

有n个顶点的树具有以下3个特点:连通,不含圈,恰好包含n-1条边,有意思的是,具备上述3个特点中的任意两个,就可以推出第三个11.1.1无根树转有根树分析:邻接矩阵占用的空间很大,用vector数组即可。由于n个结点的树,只有n-1条边,vector数组实际占用的空间与n成正比vectorG[maxn];void read_tree(){ int u,v; sca

2017-02-20 14:36:00 277

原创 10.3其他数学专题

10.3.1递推汉诺塔问题。分析:当n稍微大一点时,手工移动就开始变得困难起来,下面直接给出递归解法:首先,把前n-1个圆盘放到C轴;接下来把n号圆盘放到C轴;接下来把n号圆盘放到B轴;最后,再把前n-1个盘子放到B轴。斐波那契数列。走楼梯问题:f[n]=f[n-1]+f[n-2];养兔子问题:f[n]=f[n-1]+f[n-2];铺骨牌问题:f[n]=f[n-

2017-02-18 15:04:12 118

原创 10.2计数与概率基础

排列与组合是最基本的计数技巧。本节介绍一些基本的相关知识和方法加法原理。做一件事有n个办法,第i个办法有pi种方案乘法原理。做一件事情有n个步骤容斥原理。(概率论求和的公示)有重复元素的全排列。有k个元素,其中有k个元素,其中第i个元素有ni个,求全排列个数分析:令所有ni之和为n,再设答案为x,首先做全排列,然后把所有元素编号,其中第S种元素的编号为1~ns。这样

2017-02-18 10:22:35 486

原创 10.1数论初步

10.1.1欧几里得算法和唯一分解定理除法表达式分析:表达式的值一定可以写成A/B的形式:A是其中一些Xi的乘积,而B是其他数的乘积,而B是其他数的乘积。不难发现,X2必须放在分母位置,那其他数呢?其他数均可以放在分子位置接下来的问题就变成了:判断E是否为整数第一种方法是利用前面介绍的高精度运算:k次乘法加一次除法

2017-02-15 14:36:03 252

原创 9.4更多经典模型

9.4.1线性结构上的动态规划最长上升子序列问题分析:设d(i)为以i结尾的最长上升子序列的长度,则d(i)=max{0,d(j)}+1;最终答案是max{d(i)}最长公共子序列问题分析:设d(i,j)为A1,A2,,,Ai和B1,B2,,,,,,Bj的LCS长度,则当A[i]=A[j]时d(i,j)=d(i-1.j-1)+1,否则d(i,j)=max{d(i-1

2017-02-15 11:41:43 145

原创 9.3多阶段决策问题

每做一次决策就可以得到解得一部分,当做完所有决策做完之后,完整的解就浮出水面了。在回溯法中,每次决策对应给一个结点产生新的子树,而解的生成过程对应一颗解答树,结点的层数就是“下个待填充位置”cur9.3.1多段图的最短路多段图是一种特殊的DAG,其结点可以划分成若干个阶段,每个阶段只有上一个阶段所决定例题:单向TSP分析:在这个题目中,每一列就是一个阶段,每个阶段有三种决策

2017-02-15 11:26:31 1072

原创 DAG上的动态规划

有向无环图上的动态规划是学习动态规划的基础,很多问题都可以转化为DAG上的最长路,最短路或路径计数问题9.2.1DAG模型嵌套矩形问题分析:矩形之间的可嵌套关系是一个典型的二元关系,二元关系可以用图来建模,如果矩形X可以嵌套在矩形Y里,就从X到Y练一条有向边,这个有向图是无环的,因为一个矩形无法套在自己内部,所以他就是一个DAG,所以要求的便是DAG上的最长路径银币问题分析

2017-02-14 17:14:16 432

原创 9.1数字三角形

9.1.1问题描述与状态定义回溯法过于麻烦,为了得到高效的算法,需要用抽象的方法思考问题:把当前的位置(i,j)看出一个状态,然后定义状态(i,j)的指标函数d(i,j)为从格子(i,j)发出时能得到的最大和(包括格子(i,j)本身的值)。在这个状态定义下,原问题的解是d(1,1)状态转移方程d(i,j)=a(i,j)+max{d(i+1,j),d(i+1,j+1)}9.1.2记忆

2017-02-14 15:18:43 256

原创 8.5算法设计与优化策略

构造法。很多时候可以通过直接构造法的方法来解决问题,这是最没有规律可循的一种方法,也是最考验“真功夫”的例题:Gergovia的酒交易分析:考虑最左边的村庄。如果需要买酒,即a1>0,则一定有劳动力从村庄2忘村庄1运,而不管这些酒是哪里来的。这样问题就等价于只有2~N,且第二个村庄的需求量为a1+a2int main(){ int n; while(cin>>n&

2017-02-10 17:36:52 198

原创 8.4贪心法

8.4.1 背包相关问题最优装载问题,给出N个物体,第I个物体重量为Wi,选择尽量多,使得总重量不超过C;分析:从大到小排序即可部分背包问题。有n个物体,第i个物体的重量为wi,价值为vi。总重量不超过C的情况下让总价值尽量高。分析:需考虑两部分因素乘船问题。有n个人,第i个人的重量为wi,每艘船的最大载重量均为C,且最多只能乘两个人,用最少的船装载所有

2017-02-10 17:09:05 189

原创 8.2再谈排序与检索

8.2.1归并排序第一种高效排序算法是归并排序,按照分治三步法,对归并排序算法介绍如下划分问题:把序列分成元素个数尽量相等的两半递归求解:把两半元素分别排序合并问题:把两个有序表合并成一个void merge_sort(int* A,int x,int y,int* T){ if(y-x>1){ int m=x+(y-x)/2; //划

2017-02-10 16:22:57 199

原创 7.6迭代加深搜索

迭代加深搜索是一个应用范围很广的算法,不仅可以像回溯发那样找一个解,也可以像状态空间搜索那样找一条路径诶及分数问题分析:解决方案是采用迭代加深搜索,从小到大枚举深度上限maxd,每次执行只考虑深度不超过maxd的结点。此过程中还可以继续剪枝int ok=0;for(maxd=1;;maxd++){ memset(ans,-1,sizeof ans); if(dfs

2017-02-10 13:30:11 306

原创 倒水问题

分析:假设在某一时刻,第1个杯子中有V0升水,第二个杯子有V1升水,第三个杯子有V2升水,称当时的系统状态为(V0,V1,V2),可画出状态图注意!本题目标是倒的水量最少,而不是步数最少因此需要改进一下算法,不是每次取步数最少的结点进行扩展,而是取出水量最少的结点进行扩展,这样的程序只需把队列queue换成优先队列priority_queue。下面的代码把状态(三元组)和dist合

2017-02-10 10:24:47 427

原创 7.5路径寻找问题

路径寻找问题可以归结为隐式图的遍历,他的任务是找一条从初始状态到终止状态的最优路径,回溯法是找到一些符合要求的解八数码问题分析:把八数码问题归结为图上最短路问题,用bfs求解#include#includeusing namespace std;typedef int State[9];const int maxstate=1000000;State st[maxstat

2017-02-09 16:24:55 406

原创 7.4回溯法

在递归构造中,生成和检查过程可以有机结合起来,从而减少不必要的枚举。7.4.1 八皇后问题分析:当把问题分成若干步骤并递归求解时,如果当前步骤没有合法选择,则函数将送回上一级递归调用,即回溯#include#includeusing namespace std;const int maxn=1000;int vis[3][maxn]; //vis[1][]标记列是否有其他皇

2017-02-09 16:18:46 228

原创 7.3子集生成

给定一个集合,枚举所有可能的子集,本节讨论的集合中没有重复元素7.3.1 增量构造法第一种思路一次选出一个元素放到集合中#include#includeusing namespace std;int A[100];void print_subset(int n,int* A,int cur){ for(int i=0;i<cur;i++) printf(

2017-02-08 18:06:50 180

原创 7.2枚举排列

7.2.1 生成1~n的排列void print_permutation(int n,int* A,int cur){ if(cur==n){ for(int i=0;i<n;i++) printf("%d ",A[i]); printf("\n"); } else for(int i=1;i<=n;i++){

2017-02-08 16:40:48 169

原创 寒假学习之优先队列

优先队列是一种抽象的数据优先队列定义在头文件中,Priority_queuepq.Pq是个“越小整数优先级越低的优先队列”由于出队元素并不是最先进队的元素,出队方法有front(),变为top()自定义优先队列可以定义一个结构体cmp.重载‘()’运算符,然后用“priority_queue,cmp>pq”下面是cmp的定义Struc

2017-02-08 12:58:52 146

原创 double的输入与输出

输入:scanf("%lf",&n);输出:printf("%f",n);double类型的输入不能使用%f进行输入,得用%lf才能正常得到a的值。而在输出double类型时却可以用%f,这是因为printf("%f",a);在执行时C自动将float型的参数转换成double型。

2017-02-08 12:56:56 1897 1

空空如也

空空如也

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

TA关注的人

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