自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 poj 1740 一个博弈游戏

题意:对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。最后谁无子可取即输。(参考http://www.cnblogs.com/rainydays/archive/2011/07/09/2101918.html,清晰明白)思路:首先我们考虑两堆相等的情况,一定是谁取谁输,因为对方永远可以做对称的操作。对于

2015-01-31 17:56:36 436

原创 poj 1723 求中位数(让士兵站成一排)

题意:有N个士兵,每个士兵站的位置用一个坐标(x,y)表示,现在要将N个士兵站在同一个水平线,即所有士兵的y坐标相同并且x坐标相邻,每个士兵每次可以向相邻位置移动一步。求最少的移动步数。思路:先把他们按照横坐标相邻排好。我们先把横坐标排序,并假设起点是a,那么我们就是要求i=0~n-1,abs(a+i - x[i])的加和。即i=0~n-1,abs(a-(x[i] - i))的加和。我们构建一

2015-01-31 17:49:39 475

原创 poj 1221 dp(UNIMODAL PALINDROMIC DECOMPOSITIONS)

题意:给出一个数n,把它拆分成若干个数的和,要求这些数为UNIMODAL PALINDROMIC 的形式(见原题描述)。最大的数在中间并向两边非递增。问拆法有多少种。思路:dp。dp[i][j]表示分解数i且分解后的序列中第一个数(显然最后一个数也是)是j的分解个数。dp[i][0]中存放整数 i 的分解方法个数。其中dp数组j只需考虑从0到i/3即可,因为如果第一个数和最后一个数大于i/3,

2015-01-31 17:29:35 538

原创 poj 1018 dp\枚举+剪枝 (选择带宽)

题意:某公司要建立一套通信系统,该通信系统需要n种设备,而每种设备分别可以有m1、m2、m3、...、mn个厂家提供生产,而每个厂家生产的同种设备都会存在两个方面的差别:带宽bandwidths 和 价格prices。现在每种设备都各需要1个,考虑到性价比问题,要求所挑选出来的n件设备,要使得B/P最大。其中B为这n件设备的带宽的最小值,P为这n件设备的总价。思路:觉得是dp,但是写不出来,借

2015-01-30 21:29:31 523

原创 poj 1702 模拟(用三进制砝码测量物体质量)

题意:给定20个砝码,重量分别为3^i(i=0~19)。给定一个物品,质量为W(1 思路:将物品的重量转化为三进制,如果某一位为0或者1则不需处理、为2便在此位加上相应的3的幂将2消除,并进位。最终得到的每位都为0或者1的数即为最终天平右端的重量。#include #include #include #define N 25int n,T;int num[N],res[N];v

2015-01-30 20:21:04 594

原创 poj 1695 dp(三辆汽车运送杂志)

题意:给定n个城市,用1~n表示。有3辆车,开始都在点1上,要用这些车把杂志运送到各个城市里,当一个车在转移时,其他两辆车静止,并且两辆车不能跑到同一个位置,分配还得遵循递增的顺序,即城市i有了杂志后,车才能开到i+1城市送杂志。要求所有城市都送到杂志,汽车做过的路程和花费最小。思路:动态规划。dp[i][j][k]分别表示3辆车所在城市i,j,k时所花费的最小时间。因为城市要按照城市标号递增

2015-01-29 21:47:12 543

原创 poj 1691 dfs(矩形涂色)

题意:有一个矩形框由n个小的矩形组成,现在要把每个矩形涂上一种给定的颜色c(可相同可不同,如下图)。涂每个小矩阵有一个条件,就是位于它上面,并且与它连接的小矩形必须先涂好。当然满足条件的同一种颜色可以一起涂,问最少需要多少把刷子(每把刷子一种颜色,如果刷子拿起来多次,那么这些都要加上)。原题上有图(http://poj.org/problem?id=1691)思路:dfs。先遍历每对小矩形,确

2015-01-29 21:05:50 477

原创 poj 1694 树形贪心

题意:给定一棵树,按如下的三种规则在树上放石子:1、在游戏开始时,玩家可以拿K个石子放在桶里。2、在游戏的每一步,玩家可以从桶里拿出一个石子,并放在任意一个空的叶子上。3,当一个父节点的r个子节点都被放上了一个石子,可以将这r个石子都拿去并在父节点上放一个石子。桶里石子可以再次使用。目的在最终根上放上一个石子。问达到目的用的最少的石子数量。思路:每个节点的选择符合贪心性质,即欲在一个节点上放上

2015-01-29 17:45:09 571

原创 poj 1650/3039 追赶法枚举

题意:给定一个浮点数x和一个范围,在这个范围内选两个整数作为分子以及分母,使它们的商最接近x。解题方法:所谓追赶法枚举。初始两个整数i、j都为1,每次求i/j,如果i/j > x,则j增加1,否则i增加1,每次记录下差值最小时a,b的值。#include #include #include #define N 100000int main(){ double s,ee =

2015-01-28 22:21:07 583

原创 poj 1609 dp(堆积木能达到的最高层)

题意:给出一列数对 ,求出其最长的不减序列的长度。思路:最简单的思路是采用lis,dp实现,nlogn的复杂度(注意不减和递增的区别,二分查找的条件要进行改变)。网上看到针对此题的另一种思路,直接对数据进行dp:此题的数据范围为1~100,对数据dp的复杂度为O(100*100)。lis的代码:#include #include #include #define max(a,b)

2015-01-28 21:29:33 858

原创 poj 2029 二维树状数组(用给定大小矩形能够囊括的最大数量)

题意:一个H * W的大矩形,里面的某些格子种有树。现在要你找出一个h * w的小矩形,使得里面树的数量最多,问最多有多少棵树?思路:1、树状数组。首先按照给定的有树的格子进行构造二位树状数组,然后遍历h*w的矩形区域中的数量,求最大值。2、题目中不涉及更新,看到有人用dp去做,本质上也是遍历所有可能。#include #include #define max(a,b) ((a

2015-01-26 16:13:47 516

原创 poj 2181 dp(选子序列,奇项相加,偶项相减)

题意:给定n个数,求一个子序列,子序列计算的规则是:奇数次运算则加上这个数,偶数次运算就减去这个数。求这个子序列的最大值。思路:可以使用dp加以考虑。dp[i][0]表示第i个数上进行减运算的最大值,dp[i][1]表示第i个数上进行加运算的最大值。则dp[i][0] = max(dp[k][1])-s[i] (k#include #include #define max(a,b) (

2015-01-26 15:07:28 631

原创 poj 1936 贪心(s串是否为t的子串)

题意:给定两个字符串s和t,问s是否为t的子串。思路:算法设计第4章习题4。直接贪心即可,复杂度O(len(s)+len(t))。#include #include #define N 100005char s[N],t[N];int main(){ while(scanf("%s %s",s,t)!=EOF){ int i,j,lens,lent;

2015-01-25 17:31:51 794

原创 poj 1953 dp(无连续1的01串个数)

题意:问长度为n的无连续1出现的01串有多少个?思路:简单dp。思路1:dp[i][0]表示以0结尾长度为i的串的个数;dp[i][1]表示以1结尾长度为i的串的个数。则转移方程为dp[i][0] = dp[i-1][0]+dp[i-1][1]和dp[i][1] = dp[i-1][0]。最终对于长度为n的串输出dp[n][0]+dp[n][1]即可。思路2:注意对于长度为i的序列,其

2015-01-25 17:12:33 1083

原创 poj 1276 多重背包(用硬币拼出给定面值)

题意:有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些货币可以凑成的最接近且小于等于给定的数字cash的金额。思路:简单的完全背包。#include #include #define N 100005int dp[N],num[15],v[15];int n,m;int main(){ while(scanf("%d",&m)!=EOF){

2015-01-24 18:18:39 476

原创 poj 1189 dp(钉子和小球)

题意:中文题目看题即可。思路:将最顶上的钉子给予权值2^n,然后模拟其下落过程,计算最终落到指定位置的权值是多少即可。注意中间任意位置的权值可能来源于三个部分,1、左上位置;2、右上位置;3、如果正上方没有钉子,则来源于正上方。采用递归式的动态规划,因为可能某些钉子的权值不必求出。#include #include #define N 55char buf[1024];int s[

2015-01-24 18:10:53 367

原创 poj 1179 矩阵链乘加括号

题意:多边形游戏,有N个顶点的多边形,3 思路:发现可以用矩阵链乘来做,循环也比较好处理,将多边形按顺序复制一次即可,求链乘最大长度为n即可。但是由于定点的数据可能是负数,所以最大值可能出现负负得正的情况,所以还需要保存矩阵链的最小值。#include #include #define INF 0x3fffffff#define min(a,b) ((a)<(b)?(a):(b))#d

2015-01-23 20:58:34 474

原创 poj 2409 polya计数

题意:给定一串由n个珠子组成的项链,用c种颜色涂染,问能形成多少种不同项链。思路:Burnside算法。分析:1.旋转.考虑顺时针旋转i格的置换:循环个数为gcd(n,i)每个循环的长度为L=n/gcd(n,i)2.翻转考虑对称轴***n为奇数. 只有一种对称轴, 即轴穿过一个点. 有[n/2]个循环长度为2, 还有一个循环长度为1(被穿

2015-01-20 17:29:46 361

空空如也

空空如也

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

TA关注的人

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