自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员充电站(itcharge)

高效率编程,慢节奏生活。

  • 博客(39)
  • 资源 (3)
  • 收藏
  • 关注

原创 HDU1196_Lowest Bit【位运算】【水题】

题目大意:给你一个数A,求它的二进制表示中最右边的1表示的数比如:26的二进制表示为11010,最右边的1表示的数为00010。思路:位运算,其实就是求A & (A ^ (A-1) ),即A & (A-1)

2014-10-29 21:04:57 1199

原创 HDU1194_Beat the Spread!

题目大意:已知一场比赛两个最终得分的和,以及两个最终得分的绝对值差。求两个最终得分。若没有这样的两个得分,则输出impossible。最终得分不能为负思路:英语理解题。最主要的是读懂题意。两个最种得分的计算方法如下:a = (s+d)/2,b = (s-d)/2。若a、b都为整数,且都大于0,则满足条件,否则输出impossible

2014-10-29 19:47:03 1012

原创 HDU2844_Coins【多重背包】【二进制优化】

题目大意:给你几种硬币的价值和数量,再给你一个最大钱数M,问你这些硬币能组成价值1到M的值有多少种思路:简单的多重背包,如果总容量比这个物品的容量要小,那么这个物品可以直接取完,相当于完全背包。否则的话就转成01背包来求解。

2014-10-29 16:46:24 1188

原创 HDU1164_Eddy's research I【Miller Rabin素数测试】【Pollar Rho整数分解】

题目大意:任意一个数x,都可以被分解为几个素数(可以相同)相乘的形式,现在给你一个数x,把它分解为几个素数相乘的形式。思路:这里x的规模最大为65535,所以用简单的素性判断方法直接暴力也可以过。网上贴的代码大多简单,这里贴一个用【Miller Rabin素数测试】+【Pollar Rho整数分解】来做的代码

2014-10-29 14:54:12 1065

原创 HDU2577 How to Type【DP】

题目大意:给你一个只包含大小写字母的字符串,现在Pirates要从键盘上输出它,按CapsLk可开启关闭大小写指示灯。按Shift可转换将输入字母的大小写而不改变CapsLk的开关状态。Pirates有一个坏习惯,如果输入的时候CapsLk是开着的,那么输入结束后必须把它关闭。问,输入一个字符串,最小的按键数目是多少思路:用两个数组dpa和dpb分别来表示CapsLk关闭状态和开启状态的最小操作数。如果将要输入的字母是小写字母:dpa[i+1] = min(dpa[i]+1,dpb[i]+2);

2014-10-29 14:44:09 1041 2

原创 HDU1061_Rightmost Digit【快速幂取余】

题目大意:给你一个N,计算N^N个位上的数字是多少思路:普通方法超时,利用快速幂取余计算N^N%10,这里贴一个二进制快速幂取余的代码

2014-10-28 22:39:52 1065

原创 HDU2159_FATE【二维费用背包】【完全背包】

FATE题目大意:xhd要杀怪升级,他有一个忍耐值。每只怪都有一个经验值和需要消耗的忍耐值。杀掉怪得到相应经验值,消耗掉相应忍耐值。 xhd最多能杀S只怪,升级共需要N的经验值。若他的忍耐度掉到0,则他不会再玩游戏了。输出他升完这一级,所能剩下最大的忍耐值。如果升不了级,则输出-1。思路:背包中要存的东西肯定是经验,但是背包的容量不单是怪物数,还有忍耐度。这样,把怪物数和忍耐度作为背包的二维容量。用两个循环,得到S个怪,M容量值内得到的最高经验值。最后遍历找出经验值高于升级经验值的最小消耗的

2014-10-23 15:06:07 951

原创 HDU1203_I NEED A OFFER!【01背包】

题目大意:Speakless有N万元,他要申请学校上学。总共有M个学校可申请,每个学校都有申请费和申请概率,求他最少能获得一个学校名额的概率最大为多大思路:动态规划,用01背包做。需要注意概率的算法。至少申请上一个学校的概率 = 1-(1-p1)(1-p2)(1-p3)… 其中,p1,p2,p3…为各个学校申请概率。将N元当做背包总容量,学校当做物品。申请费为体积,不被申请上的概率当做价值,转移方程就为 dp[j] = min(dp[j],dp[j-w[i]]*p[i]); 最终算得的dp[N

2014-10-22 10:34:28 1032

原创 HDU1176_免费馅饼【数塔】

题目大意:总共有0~10个位置,gameboy站在5的位置上。给你馅饼掉落的时间的位置。gameboy每秒只能到自己位置临近的位置接馅饼。比如在5的位置上只能接到4 5 6的馅饼。在7的位置上只能接到 6 7 8的馅饼。问gameboy最后最多能接到多少馅饼。思路:动态规划的思想。将位置整体右移一个单位。位置为1~11。这样方便计算。建立二维数组。一维代表时间,二维代表位置。点上的值代表馅饼的个数。按时间顺序存储馅饼个数。最后从底往上递推。每次比较馅饼位置i和馅饼位置i-1和馅饼位置i+1的

2014-10-22 09:34:41 955

原创 HDU1171_Big Event in HDU【01背包】

题目大意:有N种设备,每种设备有一个价值和数量。先要将这N种设备按总价值尽可能的平均分给两个学院。若不能完全平均分,则第一个学院多分一点。问,两个学院能各能分得多少价值的设备?思路:每种设备都有一个数量和价值,可以把每一个设备都当做一件物品,比如第一种设备有M件,价值为V则转换为有M件物品,价值都为V。这样就能转换成01背包了。把总价值的一半当做背包容量。求最多能装多少价值的物品。因为在尽可能平分的基础上第一个学院要多分一些。所以结果为第一学院分得sum-dp[sum/2],第二学院分得dp[

2014-10-22 09:14:31 974

原创 HDU1069_Monkey and Banana【LCS】

Monkey and Banana题目大意:屋顶上放有香蕉,猴子有N块长宽高分别为x*y*z的砖。猴子想要垒一座砖塔去吃香蕉。垒塔的时候上边的砖必须严格的比下边的砖小(上边砖长<下边砖长 && 上边砖宽<下边砖宽)。砖有无数块,问最高能垒多高。思路:虽然砖有无数块。但是长为x宽为y规模的砖只能用一块。因为上下砖长和宽都不等。但是一块砖有好多种放法。这里先对x,y,z递增排序。建一个结构体存摆放方法。让x为宽,y为长,z为高为一种摆法,让x为宽,z为长,y为高为一种摆法,y为宽,z为长,x为高为

2014-10-22 08:34:00 913

原创 HDU2571_命运

命运题目大意:给你一个M*N的区域,只能向右走或是向下走。向下只能走一步,向右能够走一步或者走当前列数的倍数次(最小为2倍),问走到右下角,总和最大是多少思路:动态规划思想。每一点dp[i][j]的值都为向上一步dp[i-1][j]或是向左一步dp[i][j-1]得到最大和中的较大值,再比较它本身与它的1/2、1/3…倍(前提是1/2、1/3…倍为整数)比较,取较大值,最后加上本身就是当前最优的情况。递推到dp[N][M],得到结果。

2014-10-20 21:04:32 921

原创 HDU1087_Super Jumping! Jumping! Jumping!【LIS】

Super Jumping! Jumping! Jumping!题目大意:跳棋游戏,每次只能跳到比当前棋子大的棋子上,且只能顺着方向跳,不能回头。求走过棋子的最大的棋子和。思路:类似于求最长上升子序列,这里求得是最长上升子序列中,和最大的子序列。设dp[i]为当前最长上升子序列元素和中——最大的和。转移方程:dp[i] = max(dp[i],dp[j]+num[i]) (0 <= j < i)从前往后,对于位置i,找出位置i前边的最大和加上num[i]。因为j也是从前向后递推更新的,所以

2014-10-20 17:41:39 757

原创 HDU2602_Bone Collector【01背包】

Bone Collector题目大意:有一个骨头收藏家,他有一个容量为V的容器来收藏骨头。现在有N个骨头各个骨头的价值为v[i],各个骨头所占容量为w[i]。问他在容量为V的容器里,最多能收藏总价值为多少的骨头?思路:简单的01背包

2014-10-20 16:53:50 752

原创 HDU1505_City Game【最大完全子矩阵】

City Game题目大意:给你一个M*N的区域。R代表被占用,F代表空闲。每块空闲的区域价值3美金,求全部由空闲区域围成的矩形的价值思路:1506的升级版。不同的是,1505是二维的。把2维转换为以每一行为底,组成的最大面积就转换成了1506题。参考1506题解题报告:http://blog.csdn.net/lianai911/article/details/40208265其中h[i][j]表示第i行为底,第j列上方连续空闲位置的高度。遍历计算出该点向左右两边延伸的左右边界,从而计算出

2014-10-20 16:38:45 2859

原创 HDU1234_开门人和关门人【结构体排序】【水题】

开门人和关门人Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11012    Accepted Submission(s): 5612Problem Description每天第一个到机房的人要把门

2014-10-20 10:48:56 891

原创 HDU1250_Hat's Fibonacci【高精度】【水题】

Hat's FibonacciTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7854    Accepted Submission(s): 2551Problem DescriptionA Fibo

2014-10-20 10:47:28 968

原创 HDU2082_找单词【多重背包】

题目大意:每个单词都有一个值,从A、B…到Z的值分别为1、2…到26现在给你26个字母每个字母的个数,问:能找到多少个字母总价值<=50的单词数。(单词排列顺序无关,ACM和CMA和AMC都视为同一个单词)思路:很多人都是用母函数做的,这里说下动态规划的思想。把A、B…到Z看做26种物品,每种物品的价值为1、2…到26,每种物品的个数有num[i]个。现有一个容量为50的背包,问有多少种装法,能满足背包中总价值<=50过程:开个二维数组,一维26个表示字母种类,二维50个表示价值。最后从1-

2014-10-20 10:43:19 2511

原创 HDU3351_Seinfeld【栈】

题目大意:一串由'{'和'}'组成的字符串,'{'和'}'可以互相转换,括号匹配的时候为稳定状态。输入一个字符串,问最少经过几次变换能达到稳定状态。思路:先建立一个栈,让每个字符逐个进栈,若相邻的两个字符为"{}"(即相邻括号匹配),则两个字符同时出栈。最终栈里边留下括号不匹配的项。通过观察可知:最终留在栈里的肯定为以下情况“}}}}…{{{{{…",即左边全为'}',右边全为'{'。那么最少要转换多少次呢。由题意可知,括号总数为偶数分别计算'}'的个数sum1,'{'的个数sum2。若'}

2014-10-20 09:45:24 1153

原创 HDU2084_数塔【简单题】【数塔】

题目大意:比较好理解思路:若从上往下考虑的话,每次有两个选择,N层数塔就有2^(N-1)种方案,遍历一边不科学。换种方式,从下往上考虑,每次比较临近两个数的大小,让较大的数往上加,这样每次选择得到的都是最优的情况,逐层上移累加,最终加到顶部的时候,得到的结果就是最优的,即最大的。

2014-10-20 09:25:14 1457

原创 HDU1863_畅通工程【Prim】【并查集】

题目大意:给你M个村庄、N条路,即N条路所连接的两个村庄即路程。问能否各个村庄都能有路达到,若不通,则输出'?',若通,则计算出连接所有村庄最小的路程和思路:先用并查集判断能否所有村庄。把有路连接的村庄并到一个集合里。最后,若只有一个集合,则所有村庄都能连接。若有两个以上,则肯定有村庄不能到达。然后用Prim算法计算出图的最小生成树。

2014-10-19 21:17:14 1150

原创 HDU2552_三足鼎立【数学证明】

题目大意:给你一个公式,和其中的s,u的值,根据公式计算出v的值,最后输出 v*u-s*u-s*v 的值思路:直接按题意做也可以找规律证明结论根据arctan(1/s) = arctan(1/u)+arctan(1/v)arctan(1/v) = arctan(1/s) - arctan(1/u)tan(arctan(1/s) - arctan(1/u)) = 1/vtan(arctan(1/s))-tan(arctan(1/u)) = 1/v1+tan(arctan(1/s

2014-10-19 21:10:36 1020 1

原创 HDU1009_FatMouse' Trade【贪心】【水题】

题目大意:有N个房间,每个房间存有FatMouse喜欢吃的食物,但是每个房间的食物都需要用相应的猫粮去换。FatMouse 有M磅的猫粮,为它最多能换到多少的食物。思路:贪心方法。用结构体存每间房间的食物量和所需猫粮量。按食物的单价(即食物/猫粮的大小)进行排列,每次选单价最小的购买,知道M磅猫粮用完

2014-10-19 19:40:18 1338

原创 HDU1506_Largest Rectangle in a Histogram

题目大意:给你一个直方图,告诉你各个条形矩形的高度,求基线对齐构成的矩形中面积最大的矩形的面积对于每一个矩形。面积 = h[i]*(j-k+1),其中j,k是左右边界,h[i]是矩形的高。并且对于j <= x <= k,h[i] <= h[x]。本题中,找到左右边界j,k是关键。利用动态规划的方法,对于位置i,如果左边条形矩形的高度大于它本身,那么左边的左边界一定也满足位置i的左边界。同理如果右边条形矩形的高度大于它本身,那么右边的右边界也一定满足位置i的右边界。迭代循环下去。直到找到i的左右边

2014-10-18 09:57:36 3000 1

原创 HDU1003 Max Sum【DP】

题目大意:求使连续子序列的和最大的第一元素,最后一个元素位置,和子序列的和思路:动态规划的方法,主要是找到状态转移方程。将之前累加和加上当前值与当前值做比较, 如果将之前累加和加上当前值>当前值,那么加上当前值,最后一个元素位置变为i,如果将之前累加和加上当前值<当前值,那么sum[i] = a[i],并且改变第一元素位置为i,最后元素位置为i。具体看代码。状态转移方程:sum[i]=max(sum[i-1]+a[i],a[i]);

2014-10-17 21:33:07 1293

原创 HDU1231_最大连续子序列

题目大意:求使连续子序列的和最大的第一元素,最后一个元素和子序列的和思路:动态规划的方法,主要是找到状态转移方程。将之前累加和加上当前值与当前值做比较, 如果将之前累加和加上当前值>当前值,那么加上当前值,最后一个元素变为i,如果将之前累加和加上当前值<当前值,那么sum[i] = a[i],并且改变第一元素为i,最后元素为i。具体看代码。状态转移方程:sum[i]=max(sum[i-1]+a[i],a[i]);

2014-10-17 21:23:37 1226

原创 HDU1864_最大报销额【01背包】

题目大意:基本能看懂,再说一下,给你N张发票,发票上只有A、B、C类物品能报销,且一张发票最多报销1000元,A、B、C类商品每种都不能超过600元。给你一笔经费,问符合报销的发票中,最多能报销多少钱。思路:把价格*100转为整形,就可以把符合报销的发票作为物品,钱作为背包重量和价值,总容量为经费。求这笔经费最多能报销多少钱。

2014-10-17 20:57:34 1139

原创 HDU2955_Robberies【01背包】

Robberies题目大意:有一个强盗要去几个银行偷盗,他既想多投点钱,又想尽量不被抓到。已知各个银行的金钱数和被抓的概率,以及强盗能容忍的最大被抓概率。求他最多能偷到多少钱?思路:背包问题,原先想的是把概率当做背包,在这个范围内最多能抢多少钱。但是问题出在概率这里,一是因为概率是浮点数,用作背包必须扩大10^n倍来用。二是最大不被抓概率不是简单的累加。二是p = (1-p1)(1-p2)(1-p3) 其中p为最大不被抓概率,p1,p2,p3为各个银行被抓概率。第二次想到把银行的钱当做背包,把

2014-10-17 19:33:49 3607

原创 切割钢条【动态规划】

切割钢条【动态规划】首先将钢条切割为长度为i和n - i两段,接着求解这两段的最优切割收益Ri和Rn - i(每种方案的最优收益为两段的最优收益之和),由于无法预知哪种方案会获得最优收益,我们必须考察所有可能的i,选取其中收益最大者。如果直接出售原钢条会获得最大收益,我们当然可以选择不做任何切割。钢条切割问题还存在一种相似的但更为简单的地柜求解方法:我们将钢条从左边切割下长度为i的一段,只对右边剩下长度为n-i的一段惊醒切割。(递归求解),对左边的一段则不再切割。即问题的分解方式为:将长度为n

2014-10-16 20:54:54 1289

转载 输入输出外挂【模板】

//仅适合纯数字输入int Scan()     //输入外挂{    int res=0,ch,flag=0;    if((ch=getchar())=='-')        flag=1;    else if(ch>='0'&&ch        res=ch-'0';    while((ch=getchar())>='0'&&ch        r

2014-10-16 15:23:37 901

原创 POJ3090_Visible Lattice Points【欧拉函数】

POJ3090_Visible Lattice Points【欧拉函数】题目大意:现在有一个二维坐标系,只有离散的整数坐标上有点。现在站在N点向周围看去。问能看到多少个点。假如看到了(2,1),那么(2,1)后边的(4,2)(6,3)…就被挡住看不到了。考虑1*1的时候,有三个点(1,0)(1,1)(0,1)。(1,0)和(0,1)关于(1,1)对称再看2*2的时候,有个点(1,0)(1,1)(2,1)(0,1)(1,2)(1,0)和(0,1)关于(1,1)对称(2,1)和(1,2)关于(

2014-10-16 09:06:27 1277

原创 POJ2478 Farey Sequence【快速求欧拉函数】

POJ2478_Farey Sequence【快速求欧拉函数】题目大意:给你一个数n,对于0 < a < b <= n,求真分数a/b的个数思路:因为a/b为真分数,所以a和b互质。求真分数a/b的个数。其实就是求0 < i <= n中,小于i的正整数中,有多少个与i互质的数。累加起来就是真分数a/b的个数。其实就是欧拉函数因为n的规模为10^6,可用快速求欧拉函数的方法求得(类似于筛法求素数)。根据推论:设P是素数, 若p是x的约数,则E(x*p)=E(x)*p. 若p不是x的约数

2014-10-15 20:05:35 1351

原创 POJ1284_Primitive Roots【欧拉函数】

题目大意:p是奇素数,如果{x^i % p | 1 <= i <= p - 1} = {1,2,...,p-1},则称x是p的原根。给出一个p,问它的原根有多少个。思路: {x^i% p | 1 <= i <= p - 1} = {1,2,...,p-1} 等价于 {x^i%(p-1) | 1 <= i <= p - 1} = {0,1,2,...,p-2},即{x^1,x^2,x^3,…,x^(p-1)}为p的完全剩余系等价于若x与p-1互质(gcd(x, p-1) = 1),则{x^0,x

2014-10-15 18:48:23 1033

原创 POJ2407_Relatives【欧拉phi函数】【基本】

POJ2407_Relatives【欧拉phi函数】【基本】题目大意:给你一个正整数N,求在小于N的范围内,有多少个正整数与N互质?思路:典型的欧拉phi函数欧拉函数(摘自百度百科):在数论,对正整数n,欧拉函数φ(n)是少于或等于n的数中与n互质的数的数目。φ(n) = n(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 (注意:每种质

2014-10-15 18:23:25 1560

原创 POJ2429_GCD & LCM Inverse【Miller Rabin素数测试】【Pollar Rho整数分解】

GCD & LCM Inverse题目大意:给你两个数a和b的最大公约数和最小公倍数,求a和b(其中在满足条件的情况下,使a+b尽量小)思路:最大公约数和最小公倍数的规模为2^63,暴力果断不行。已知a*b = L(最小公倍数)*G(最大公约数);设p = L/a,q = L/b,s = L/G;即p、q为a和b除去最大公约数的部分,且两者互质;GCD(p,q) = 1,LCM(p,q) = p * q = L*L/(a*b) = L*L/(L*G) = L/G = s。LCM(p,q)

2014-10-15 17:27:02 1721

原创 POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】

题目大意:T组数据,对于输入的N,若N为素数,输出“Prime”,否则输出N的最小素因子思路:因为N的规模为2^54所以普通的素性判断果断过不了。要用Miller Rabin素数测试来做。而若N不为素数,则需要对N进行素因子分解。因为N为大数,考虑用Pollar Rho整数分解来做。

2014-10-15 09:47:23 1912

原创 NYOJ448_寻找最大数【贪心】

题目大意:……删去m位数,输出剩余的数字 使新数最大思路:贪心思想。设位数为len,删去m位数,输出新数,就是输出新数为len-m位根据贪心思想。从最高位开始,每次保证取出来的数字都是最优的。比如说7位数,删去3位数。应该从第一位到第len-2位上取最大值。这样首先保证最高位千位上的结果正确。再从刚才找到值的下一位开始到第len-1位上取最大值。保证百位上的结果正确。再从刚才找到值的下一位开始到第len位上取最大值,保证各位上结果正确。比如:9456973 4因为要删去4个数,所以输出新数为

2014-10-14 19:29:27 1023

原创 HDU1013_Digital Roots【大数】【水题】

题目大意:给你一个数,若这个数的各个位数上的和为一位数字,则输出结果。否则继续计算上一结果的各个位数上的和,知道结果为一位数字,进行输出思路:……

2014-10-13 09:36:58 1198

原创 HDU1163【九余数定理】【水题】

Eddy's digital Roots题目大意:给你一个正整数n,把n的各位上数字加起来,如果结果小于10,则所得结果为n的数字根,如果大于10,则再把上边所得结果各位上的数字加起来。现在给你一个数n,求n^n的数字根思路:一看数据规模10000^10000,肯定要把n拆分掉。通过找规律发现,求n^n的数字根可转化为先求n的数字根a,然后求a*n的原根,赋给a,接着依次求a*n,求n-1次,就得到了n^n的数字根。例如:求5^5的数字第一种方法:5^5 = 3125 3 + 1 + 2

2014-10-13 08:26:31 2054

Flask Web开发

本书共分三部分,全面介绍如何基于 Python 微框架 Flask 进行 Web 开发。 第一部分: Flask 简介,介绍使用 Flask 框架及扩展开发 Web 程序的必备基础知识 ; 第二部分:给出一个实例,真正带领大家一步步开发完整的博客和社交应用 Flasky, 从而将前述知识融会贯,付诸实践。 第三部分:介绍了发布应用之前必须考虑的事项,如单元测试策略、性能分析技术、Flask 程序的部署方 式等。

2018-05-29

2014年北大ACM暑期培训资料、讲义

北京大学的ACM国际大学生程序设计竞赛(ACM/ICPC)水平在国内处于领先地位,自2005年至2013年每年均参加总决赛,名次分别为11(铜牌)、13、14、13、20、14、13,13,13,13。北京大学多次承担ACM/ICPC亚洲区预选赛命题,广获好评。近几年负责命题的赛区有:2008年北京赛区,2009年宁波赛区,2010年杭州赛区,2010年福州赛区,2011年北京赛区,2011年福州赛区,2012年金华赛区,2012年杭州赛区。2013年杭州赛区。均由此课程主讲教师郭炜负责命题。北京大学的Online Judge --- POJ 更是国内最有影响力的ACM/ICPC竞赛训练平台之一,在国际上也有较高知名度和较多用户。

2014-08-12

空空如也

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

TA关注的人

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