自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 flac 和 wav音频格式转换

参考:https://stackoverflow.com/questions/23925494/how-to-convert-wav-to-flac-from-pythonwav to flac:import audiotoolsfilepath_wav = 'music.wav'filepath_flac = filepath_wav.replace(".wav", ".flac"...

2019-03-30 11:06:34 1688

原创 百练1603 floyd算法基础

#include<iostream>#include<cstring>using namespace std;#define INF 0x3f3f3f#define n 20const int N=25;int dist[N][N];void init(){ for(int i=0;i<=n;i++) for(int j=0...

2018-07-23 22:13:12 165

原创 百练4131 01背包

注意此题必须采用滚动数组的方法:因此需要注意内循环的顺序:#include<iostream>#include<stdio.h>#include<cstring>#include<algorithm>using namespace std;const int maxn=3500;int w[maxn];int v[maxn];int...

2018-07-09 20:38:06 236

原创 百练2806 最长公共子序列

经典的动态规划题目:#include<iostream>#include<stdio.h>#include<cstring>using namespace std;int main(){ char s1[205],s2[205]; int f[205][205]; while(scanf("%s%s",s1+1,s2+1)&g...

2018-07-09 17:17:19 179

原创 百练1661 Help Jimmy

此题需要分成两种状态来规划:LeftMinTime[k]:从第k个平台的左端下落到地面的最短时间RightMinTime[k]:从第k个平台的右端下落到地面的最短时间如果平台k左端正下方有平台j,则必然会落到平台j上,从而需要求平台j的左右端下落到地面的最短时间。此题的wa点在于高度MAX,也就是如果两个平台之间的高度差大于MAX,则该条路是不可走的;还有就是如果落到平台边缘视为落到平台上,这样如...

2018-07-09 16:30:19 227 1

原创 百练2757 最长上升子序列

此题是很经典的动态规划题目。#include<iostream>using namespace std;int main(){ int a[1001]; int n; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; int f[1001]; //f[i]表示以a...

2018-07-09 12:24:50 234

原创 百练1011 Sticks

这是一道搜索题,用递归的方法枚举所有可能,但是要及早判断出有的局面不可行,从而推翻该局面,而不是在该局面下继续尝试,这就是剪枝。因希望棍子尽可能短,因此枚举棍子长度的范围为从最长的那根木棒的长度,到木棒长度和的一半。如果都不成功,那么只能把所有木棒拼成一根棍子。枚举的时候,不需要每个长度都尝试,对于不是木棒长度和的因子的长度,可以直接否定。这是最容易也是最强的剪枝。用一个二元组(R,M)表示当前状...

2018-07-09 10:44:07 179

原创 百练2787 算24

用n个数计算24,第一步一定是先选取两个数进行某种运算,再将得到的结果和剩下的n-2个数构成n-1个数去算24。于是第一步操作后,问题变为和原问题形式相同但是规模减小(由n变为n-1)的新问题。这样的问题适合递归解决。#include<iostream>#include<cmath>using namespace std;#define eps 1e-6//注意浮...

2018-07-08 20:23:21 537

原创 百练4117 整数划分

#include<iostream>using namespace std;//对整数n进行划分,最大加数不超过m的划分数int f(int n,int m){ if(m==1) return 1; //最大加数不超过1的划分数只有一种,就是全为1 if(n<m) return f(n,n); if(n==m) return 1+f(n,m-1...

2018-07-08 15:54:44 291

原创 百练1664 苹果装盘

此题是整数划分问题的扩展:f(m,n)表示m个苹果放在n个盘子的放法数目。如果m<n,则n-m个盘子永远为空,所以f(m,n)=f(m,m);如果m>=n,则有两种情况:若n个盘子至少存在一个为空,则f(m,n)=f(m,n-1);若n个盘子都不空,可以从每个盘子中都拿走一个苹果,不影响不同放法的数目,则f(m,n)=f(m-n,n);递归终止:当只有1个盘子或者没有苹果时,只有一种放...

2018-07-07 22:10:18 355

原创 百练4132 四则运算表达式求值

要是学过编译原理这题就比较好懂了,但是不好想到。简单算术表达式的上下文无关文法为:exp--> exp addop term | termaddop--> + | -term--> term mulop factor | factormulop--> * | /factor --> (exp) | number将文法化成EBNF范式,然后采用递归下降的方式求解exp的...

2018-07-07 21:18:21 642

原创 百练2694 逆波兰表达式(递归求解)

逆波兰表达式的递归定义:1. 任何数都是逆波兰表达式2. +、-、*、/后面加上空格,再加上一个逆波兰表达式,再加空格,再加一个逆波兰表达式,形成一个逆波兰表达式。故可采用递归求解逆波兰表达式的值,类似编译原理中递归下降分析的思想:#include<stdio.h>#include<math.h>#include<stdlib.h>double exp(...

2018-07-07 18:04:32 707

原创 百练2748 全排列

递归:有的问题在解决时,可以先做一步操作,操作后的局面是和原问题形式相同但是规模变小的新问题,由新问题的答案可以推出原问题的答案,这样的问题,就可以使用递归解决。这种情况下使用递归,会不停地缩小问题的规模,直到问题缩小到某一规模后(称为满足了某个终止条件),就无法或者不必再递归缩小其规模,而是立即求出该最小问题的解,并且再往上层层推出最初原始问题的解。递归函数不能总是没完没了地调用自身,必须存在某...

2018-07-07 16:50:20 194

原创 百练2812 恼人的青蛙

此题关键是将所有点排序后,遍历每次确保被选中的两个点是一条青蛙路径上最先被踩踏的两个水稻。在遍历点的过程中,要注意青蛙能够从一侧进入稻田,沿着直线一直跳,直到最后跳出稻田,如果青蛙连着跳了4个点,该条直线上的第5点还在稻田中,但是青蛙没有踩踏,则该条路径不合法,不能记录青蛙当前最大的踩踏数是4,而应该记0。#include<stdio.h>#include<string.h&g...

2018-06-26 00:09:08 302

原创 百练2811 熄灯问题

1. 第2次按下同一按钮时,将抵消第1次按下产生的结果,所以每个按钮最多只需按下一次2. 各个按钮被按下的顺序对最终结果没有影响3. 对第1行中每盏亮着的灯,按下第2行中对应的按钮,就可以熄灭第1行中的全部灯。如此重复,就可以熄灭第2,3,4行的全部灯。最后判断这种按灯方式是否将第5行的灯也成功熄灭。...

2018-06-25 14:46:59 303

原创 百练2692 假币问题

一开始的思想就是能够根据天平的平衡情况标记出所有的真币,然后天平不平衡情况的硬币中肯定只有一枚假币,剩下的都是已经判断为真的真币,很明显这种想法在下面这组测试用例中不成立:ABCD EFGH evenIJ KA downJK AB down采用上面的思想无法判断出这组用例的结果。因此正确的思想是遍历所有可能的方案(24种),(x,w)表示假币编号为x,w表示假币比真币轻还是重。#include&l...

2018-06-24 22:18:38 627

原创 百练2706 麦森数

此题的关键是计算2^p,采用移位的方式不断计算p的二进制表示,进而通过乘以对应的2的次幂得到结果。 此外,此题用1个数组元素表示十进制的4位数字,即采用万进制(10000进制),提高高精度计算的速度。主要是实现高精度乘运算。此题也让我发现的我的codeblocks 16.01编译环境有问题orz。#include<stdio.h>#include<memory.h>#i...

2018-06-23 16:39:23 222

原创 百练2737 大整数除法

计算两个大整数相除的商。首先将字符串逆序转换成对应的整型数组,然后基本思想是做减法,从被除数里减去多少个除数,商就是多少。为了减的更快一些,可以先减去除数的10的ntimes倍数。如7564/23, 先减去23的100倍,发现可以减3次,余下646,于是商增加300。然后用646减去230,发现可以减2次,于是商增加20。最后用186减去23,发现可以减8次,因此最终商为328。关键是写一个大整数...

2018-06-20 14:58:20 334

原创 百练2980 大整数乘法

大数运算主要是先将字符串转换成整型数组,然后根据手工模拟运算过程。从最后一位开始向前运算,最后结果注意处理前导0和结果就为0的情况。#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int main(){ char s1[200],s2[200];...

2018-06-19 17:53:48 186

原创 百练2745 显示器

将数字表示成计算器显示的形式。一个计算器显示的数字由8笔画构成,因此记录每个数字(0-9)在每个笔画对应的形式。#include<stdio.h>#include<string.h>//记录每个数字的笔画char n1[11]="- -- -----";char n2[11]="| ||| ||";char n3[11]="||||| |||";char ...

2018-06-18 21:03:51 306

原创 百练2950 摘花生

注意:此题要求采摘花生按照从大到小的顺序采摘,关键是处理采摘后能否回到大路上。数组下标从1开始便于求解,可以令大路的横坐标为0;否则从0开始,在如下代码块会出错:if(pi==0) pj=maxj;因为在大路上可以随便移动,纵坐标任意,但是在第一行上不能随便移动。再者就是地里没有花生了应该及时退出。#include<iostream>#include<cmath>#in...

2018-06-18 17:44:20 179

原创 百练2746 约瑟夫问题

有n只猴子,从1开始报数,报到m的猴子离开,剩下的猴子接着从1开始报数。主要在于模拟整个过程。#include<stdio.h>int main(){ int n,m; int a[301]; while(scanf("%d%d",&n,&m)) { if(n==0 && m==0) ...

2018-06-18 15:45:25 167

原创 百练2964 日历问题

已知公元2000年1月1日是星期六,计算经过n天后的年月日和星期。由于2000年有366天,但是第一天已经过去,所以在计算时要注意2000年还剩365天。#include<stdio.h>#include<string.h>char s[7][10]={"Saturday","Sunday","Monday","Tuesday","Wednesday&quo

2018-06-17 19:25:58 175

原创 百练2744

此题主要掌握常用的字符串处理函数:strlen: 计算字符串的长strncpy: 复制字符串的子串char* strncpy(char* dest, const char * src, size_t n );将source串的前n个字符复制到destination串中,返回结果与destination相同。strcpy: 复制整个字符串到另一个字符数组char* strcpy(char* dest...

2018-06-15 22:16:28 158

原创 百练2974

此题对重复电话号码进行计数并对各电话号码按照字典序升序输出,采用map一举两得。#include<iostream>#include<stdio.h>#include<string.h>#include<map>#include<string>using namespace std;char match[]="2223334...

2018-06-15 19:58:39 285

原创 poj1657 Distance on Chessboard

本题关键在于分析棋盘上王、后、车、象的行走规则。设起点坐标为(x1,y1),终点坐标为(x2,y2);dx=abs(x1,x2),dy=abs(y1-y2)。1. 王可以横、竖、斜走,每步一格所需最小步数为min(dx,dy)+abs(dx-dy)对于橘黄色三角所在的特殊位置,先竖着走再斜着走和两次都斜着走所用的步数是一样的2. 后可以横、竖、斜走,每步格数不限横、竖、斜1步走到,否则2步走到3....

2018-06-11 22:04:15 312

原创 poj1952(dp+想法)

//此题难点在于求不能重复的种数#include#include#includeusing namespace std;int a[5002],f[5002],cnt[5002];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(in

2016-11-16 22:37:10 402

原创 poj2385

#include#include#includeusing namespace std;const int maxn=1005;int f[1005][31];int a[maxn][3];int main(){ int n,k,b; scanf("%d%d",&n,&k); memset(a,0,sizeof(a)); for(int i=1;

2016-11-15 21:57:46 638

原创 poj1157(简单dp)

#include#include#includeusing namespace std;int f[105][105];int a[105][105];int main(){ int n,m; scanf("%d%d",&m,&n); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) {

2016-11-06 19:55:02 287

原创 poj1887(最长下降子序列)

#include#include#includeusing namespace std;#define maxn 100000int f[maxn];int a[maxn];int main(){ int cas=0; int b,c; while(scanf("%d",&b)&&b!=-1) { int i=0;

2016-11-04 20:22:15 355

原创 poj2955(区间dp基础)

#include#include#includeusing namespace std;char s[150];int f[150][150];//f[i][j]表示s[i]到s[j]区间匹配的最多括号数int main(){ while(scanf("%s",s)) { if(s[0]=='e') break; int len=st

2016-11-04 17:57:11 313

原创 hdu2159(二维费用背包)

//f[i][v][u]表示杀前i种怪,杀了v只,消耗了u忍耐度,得到的最大经验值#include#include#includeusing namespace std;int f[200][200];int main(){ int n,m,k,s; int a[105],b[105]; while(scanf("%d%d%d%d",&n,&m,&k,&s

2016-11-04 10:34:14 311

原创 poj1787

//由于此题是要求恰好装满,故初始化时为-OO#include#include#includeusing namespace std;#define maxn 10005#define INF -0xffffffint v;int f[maxn];int lm[4],w[4];int sum[maxn][4];void zero(int c,int num,int id)

2016-11-03 20:30:35 337

原创 poj1276(多重背包模板)

#include#include#includeusing namespace std;#define maxn 100005int n,v;int f[maxn];int vl[15],am[15];void zero(int c,int w){ for(int i=v;i>=c;i--) { f[i]=max(f[i],f[i-c]+w);

2016-11-03 16:18:44 364

原创 hdu2202

由于最大三角形总会由凸包的顶点围成,故要先找到一个凸包,然后枚举凸包的顶点#include#include#include#includeusing namespace std;#define maxn 50005const double pi=acos(-1.0);struct Point{ int x,y;}s[maxn];int st[maxn],top;int

2016-10-09 20:04:18 304

原创 poj1113(凸包Graham算法)

//Graham算法//poj1113此题点坐标为int型#include#include#include#includeusing namespace std;#define maxn 1100const double pi=acos(-1.0);struct Point{ int x,y;}s[maxn];int st[maxn],top;int cross(

2016-10-07 16:28:41 418

原创 输出凸包上的所有点

//从原点开始,按逆时针顺序输出凸包上的每个点#include#include#include#includeusing namespace std;struct Point{int x,y;}s[1005];bool cmp(Point a,Point b){ if(a.y==b.y) return a.x<b.x; else return a.y<b.

2016-10-07 15:55:00 546

原创 hdu2955

一般的解法#include#include#includeusing namespace std;double f[110][10005];int main(){ int t; scanf("%d",&t); double pp,p[150]; int n,s[150]; while(t--) { scanf("%l

2016-10-05 11:56:51 231

原创 hdu5510(并查集+KMP)

/*题解:此题关键在超时,可用并查集来剪枝,把母串的子串都并到母串的集合里这样的目的是查询的时候直接找当前节点的父亲,如果父亲是该串的子串,则子串必定也是,将父亲标记为已经访问,不用再多次重复比较子串;如果父亲不是该串的子串,则直接flag记录该串的下标,该串是满足条件的,最后找出最大下标的该串。*///用kmp算法比较一个串是否是另一个串的子串#include#include#i

2016-10-04 10:39:00 297

原创 poj2886(线段树单点更新)

/*到1号节点的距离为s的点,则该点的相对节点1的编号为(s+n)%n+1,另外此题要打表求某个数的因子个数反素数就是 对 x来说约束个数 G(x),如果 对于 i<x 有 G(i)<G(x)则称x为反素数*/#include#includeusing namespace std;const int maxn=500002;//反素数及因子个数打表int ap[40] ={1,2

2016-09-25 00:56:33 263

空空如也

空空如也

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

TA关注的人

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