自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

忘川蒿里

若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。

  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 HDU1800->Trie树

HDU1800->Trie树题意: 给你一串数字,代表士兵的等级,等级高的士兵可以教等级地的士兵,但要求每个士兵最多只能教一个士兵,且每个士兵最多是能有一个老师。抽象的说就是,将一串数尽可能少的分成几组满足每一组里的数字各不相同。题解: 一开始没注意题目条件,觉得贪心可做,这道题无非是要求出现次数最多的数字出现了多少次 后来发现数字最多30位,long long最多只能存19位的数字

2016-07-30 22:25:17 287

原创 HDU1075->Trie树

HDU1075->Trie树题意: 给一个单词字典,要求翻译一段话。题解: Trie树维护的信息为外来词汇,每个单词的叶子节点储存对照的翻译。代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>using namespace std ;#define MAX 3005cha

2016-07-30 12:15:08 256

原创 LightOJ1129->动态Trie树

LightOJ1129题意: 给定若干个字符串,判断是否存在某个字符串是其他字符串的前缀题解: 通过Trie树维护前缀,然后查询。 处理过程中需要考虑两种情况: 1.新添加的字符串是已有字符串的前缀 2.已有字符串是新添加字符串的前缀 (具体操作见代码)注意:动态构造Trie树一定要释放内存代码:#include <stdio.h>#include <str

2016-07-30 02:04:27 339

原创 Trie树介绍与动态构造->HDU1251

Trie树介绍:Trie树,称为单词前缀树,字典树,是一种用于快速检索的多叉树结构核心思想: 空间换时间,利用字符串的公共前缀来最大限度地减少无所谓的字符串比较,从而降低时间复杂度。基本性质: 1.根节点不包含字符,除根节点外的每条边对应一个字符 2.从根节点到某一个节点,将边上的字符连起来,会得到该节点对应的前缀 3.每个节点对应的前缀都不相同Trie树的编程实现1

2016-07-29 16:19:53 280

原创 LightOJ1422->区间DP

LightOJ1422->区间DP题意: 给你n天要穿的衣服,可以套着穿,但是一旦脱下来就不能再穿,问这n天最少需要准备多少件衣服题解: 题目类型:区间DP dp[i][j]表示区间[i,j]最少需要多少件衣服 (从最小的区间向最大的区间扩展) 如果第i件衣服不能重复利用,则: dp[i][j] = dp[i+1][j] + 1 如果在之后的区间

2016-07-29 12:17:01 633

原创 UVA10090->扩展欧几里得

UVA10090 扩展欧几里得题意: 现在有两种盒子要装n个珠子,给出每种盒子的容量和价值,求每个盒子恰好能装满的需要花费。题解: 要求最少花费,就要考虑每种盒子装单个珠子的花费,并且求最优解时让花费较高的那种盒子尽可能少,即先求出这种盒子的最小正整数解。 题目可以等价成一个线性方程求解的问题: n1*num1 + n2*num2 = n 解法使用扩展欧几里得定理。

2016-07-28 11:37:05 757

原创 欧几里得与扩展欧几里得介绍->POJ1061

1.欧几里德欧几里得算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明:表示成a = kb + r,则r = a mod b   假设d是a,b的一个公约数,则有   d|a, d|b,而r = a - kb,因此d|r

2016-07-28 01:08:21 318

原创 HDU3308->线段树区间合并

线段树成段更新题意:给定一些数,有两种操作,更新替换某个数值以及查询一个区间内最长连续递增子串的长度题解: 由于题目给出数据范围很大,所以用线段树进行操作。 线段树需要维护的信息: 每个区间的最长递增子串的长度、以该区间的左边界为起点的最长连续子串的长度、以该区间右边界为终点的最长子串的长度。这里主要说明一下pushup(),其余函数操作比较常规,不做说明。 pushup()函

2016-07-27 14:40:14 367

原创 数论->快速幂

数论基础快速幂算法介绍 算法利用了二分的思想,可以达到O(logn)。 可以把b按二进制展开为:b = p(n)*2^n + p(n-1)*2^(n-1) +…+ p(1)*2 + p(0) 其中p(i) (0<=i<=n)为 0 或 1 这样 a^b = a^ (p(n)*2^n + p(n-1)*2^(n-1) +…+ p(1)*2 + p(

2016-07-27 00:29:37 412

原创 POJ2481->树状数组

题意:给N个节点的S和E,求对于每个节点,其他节点和它的关系满足Si Ej - Sj 的个数题解:由于E的关系递减,S的关系递增,因此可以先对E排序,然后利用树状数组更新并查询每个Sj在其之前的Si的个数就是问题的解#include #include #include #include using namespace std ;#define MAX 100005int T[

2016-07-26 23:35:13 307

原创 POJ1988->并查集

题意:有几个stack,初始里面有一个cube。支持两种操作:1.move x y: 将x所在的stack移动到y所在stack的顶部。2.count x:数在x所在stack中,在x之下的cube的个数题解:构建并查集,在合并和查找集合的过程中更新数量#include #include #include using namespace std ;#define MAX 30005

2016-07-26 17:55:21 302

原创 UVA10154->区间DP

题意:给出一些乌龟的重量和力量,求这些乌龟能叠出的龟塔的最大高度题解:区间DP,dp[i][j]代表前i只乌龟叠j层的最小重量,从层数开始扩展转移,先求从1-n每个区间叠一层的质量,再求叠两层,以此类推       状态转移方程:if(turtle[i].strength >= dp[i-1][j-1])dp[i][j] = min(dp[i-1][j] , dp[i-1][j-1]+

2016-07-26 11:04:34 366

原创 UVA10020->贪心

题意:给一些区间,求能把[0,M]所有点覆盖需要的最少区间个数,并输出这些区间的左右端点题解:贪心,关键在于贪心策略能不能想对。       贪心策略:把所有可能有用的区间按照左端点递增的顺序排序,然后依次去找能够缩小区间右边界范围的区间,直到区间的左端点也被覆盖,这里枚举的复杂度为O(N^2),这样的贪心策略就能保证每次选取的区间都是最优的解#include #include

2016-07-26 01:27:01 286

原创 HDU4430->二分&&枚举

题意:按照每一圈的蜡烛数量为k^i(1题解:这是一道二分的题目,在求解过程中,先可以根据等比数列求和公式以及数据范围得出,蜡烛最多有40圈,所以求解r*k的最优解可以通过从2到40枚举半径r,并通过半径r去二分计算该半径下,如果存在蜡烛根数的解,那么解k是多少。#include #include using namespace std ;long long tot ;long lo

2016-07-26 01:19:15 367

原创 POJ2524->并查集

题意:给出一些在一个集合的元素信息,求一共有多少个无交集的集合题解:并查集,初始集合个数为人数,在合并集合的过程中,每次在一个集合里合并了一个人,集合个数就减一#include #include using namespace std ;#define MAX 50005int parent[MAX] ;int rank[MAX] ;int num[MAX] ;int cnt

2016-07-25 17:30:37 846

原创 POJ1611->并查集

题意:求包含0元素的集合的元素个数题解:基础并查集#include #include using namespace std ;#define MAX 30005int parent[MAX] ;int rank[MAX] ;int num[MAX] ;void make_set(int x){ parent[x] = x ; rank[x] = 0 ; num[x]

2016-07-25 16:59:20 249

原创 POJ3685->二分套二分

题意:给出一个矩阵的对应元素的计算公式,求第M小的元素的值是多少题解:首先二分答案,如果对应这个答案,比该答案小的元素个数大于M个, 则在左区间继续二分,否则在右区间二分            在统计元素个数的过程中,还会在用到一次二分,我们在枚举j的过程中,每当j固定以后,函数就是关于i的单调递增函数,因此可以二分求得i为多少时该函数的值小于之前二分的答案,并计算小于M的元素个数#i

2016-07-25 11:40:53 362

原创 HDU4349->Lucas定理

Lucas定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])  modp同余即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 

2016-07-25 01:17:16 376

原创 HDU1506->单调栈

题意:求连续区间内矩形覆盖的最大面积,连续区间内矩形宽度都为1 , 高度只能取最小高度题解:维护一个单调递减的单调栈对于一个新的元素:(1)如果此时栈为空或者栈顶元素比新元素小,则将该元素入栈;(2)如果栈顶元素与新元素相等,则跳过新元素;(3)如果栈顶元素比新元素大,那么此时需要更新栈顶元素并更新面积,一直到栈顶元素小于新元素为止。#include#include

2016-07-24 19:58:44 317

原创 POJ2796->单调栈

题意:给你一段区间,需要你求出(在这段区间之类的最小值*这段区间所有元素之和)的最大值题解:实际上这个题目就是要对每一个节点进行扩展,这样扩展的话,复杂度是O(n^2)。减少时间复杂度要用单调栈,单调栈处理的问题就是对每一个节点进行扩展的问题,这个题目要维护的是一个单调递减栈,即从栈顶元素到栈底元素,值是单调递减的,即栈顶元素的值始终是栈的最大值。然后每一个值有属于自己的区间,这个区间目的是为

2016-07-24 13:33:54 494

原创 HDU4497GCD and LCM ——算数基本定理

如果G%L != 0,说明一定无解。把K = G / L质数分解,G / L = p1^t1 * p2^t2 * p3^t3 * ……;同时 x/= L, y/= L, z/=L,不影响结果。假设三个数字的质数分解是:x = p1^i1 * p2^i2 * p3^i3 * ……y = p1^j1 * p2^j2 * p3^j3 * ……z = p1^

2016-07-13 16:22:04 340

原创 HDU1215——数论解法

题意:给出一个正整数n,求出不包含它本身的所有因子的和思路:运用算术基本定理对这个这个整数进行拆分整数约数和公式即,sum = (1+p1+p1^2+...+p1^a1)(1+p2+p2^2+...p2^a2)...(1+pk+pk^2+...pk^ak)(注:该公式计算结果包含整数本身)#include #include #include using nam

2016-07-13 11:17:32 602

原创 LightOJ1236->算术基本定理

算术基本定理的应用题意:找出对于整数对(i,j),他们的lcm为n,这样的整数对有多少。思路:比如24=2^3*3^1:(1)如果一个数完整地包含了3^1但是没有完整地包含2^3(一个数x完整地包含某个质因数p及其出现的次数t,指x可以被p^t整除),比如3,6,12,那么另一个数必须完整地包含2^3,比如8,24。那么此时有六种组合(3,8),(3,24),(6,8),(

2016-07-13 00:58:31 1013

原创 HDU3555->数位DP

//数位DP//从最高位开始向下DP #include #include #include using namespace std ; int bit[40] ; long long dp[40][3] ;//dp[len][0] 代表数字长度为len不含49的个数//dp[len][1] 代表数字长度为len不含49但是以9开头的个数(显然dp[len][1]包含在dp[l

2016-07-12 20:51:23 314

原创 HDU3653->数位DP

//数位DP//判断1-n中有多少个数字含有13且是13的倍数#include#include#includeusing namespace std ;int n ;int len ;int bit[20] ;int dp[20][20][3] ;//dp[pos][mod][st]//pos:数位//mod:余数//st: st==0末尾不是1// st=

2016-07-12 11:35:18 456

原创 HDU2089->数位DP

//dp[i][0]:第i位没有不吉利数字的个数//dp[i][1]:第i位没有不吉利数字但最高位数字为2//dp[i][2]:第i位有不吉利数字#include#include#includeusing namespace std ;int m , t ;int dp[10][3] ;int num[10] ;void Init(){ memset(dp, 0 ,

2016-07-11 23:29:46 382

原创 POJ2378->树形DP

//树形DP//去掉哪些点可以使树上联通的节点个数小于n/2//对树进行后序遍历//状态转移方程:dp[root] = max(n-sum , mason) ;#include #include #include #include using namespace std ;#define MAX 10005vector tree[MAX] ;int n;

2016-07-10 20:28:45 531

原创 POJ1463->树形DP

//树形DP//树的最小点覆盖//f[x][1]以x为根的子树在x上放置的士兵的最少所需的士兵数目//f[x][0]以x为根的子树x上不放置的士兵的最少所需的士兵数目//状态转移方程://如果当前节点选取,则其子节点可选可不选dp[root][1] += min(dp[tree[root][i]][1],dp[tree[root][i]][0]) ;//如果当前节点不选,则其子节点必须

2016-07-10 16:56:10 1233

原创 HDU1520->树形DP

//树形DP//没有上司的舞会//树形DP先确定各个子树,再递归返回根,整个过程相当于树的后序遍历//本题用vetor模拟树的父子关系//vector[i]里存放以i为父节点的所有子节点//状态转移方程://如果该节点不选:dp[root][0] += max(dp[tree[root][i]][1],dp[tree[root][i]][0]);//如果选取该节点:dp[root][

2016-07-10 11:21:59 372

原创 POJ5115->区间DP

//区间DP//DP[i][j]表示杀死(i,j)区间的狼能受到的最小伤害//区间长度从1开始扩大//状态转移方程:边界:DP[i][i] = a[i] + b[i-1] + b [i+1] ;//              其他:DP[i][j] = min(DP[i][k-1] + a[k] + DP[k+1][j] ) + b[i-1] + b [j+1] ;//k表示区

2016-07-09 17:18:07 289

LightFaceNet Model

Model of SqueezeFaceNet and MobileFaceNet. The full project at my github(https://github.com/SelinaFelton/LightFaceNet)

2018-08-04

Win32MFC计算器

实验课实现的win32MFC计算器,可实现+、-、*、/、sqrt、%运算,同时支持数字键盘输入,仅供参考学习,欢迎批评指正

2018-03-05

空空如也

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

TA关注的人

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