自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 UVa 10404. Bachet's Game

题意为给出总石子数n,和m堆石子,两个人轮着取石子,每次只能从总石子中取m堆中的一堆的个数的石子,取走最后一个石子的胜。S先取,O后取。用状态f【i】表示还剩i个石子时S的胜负。当为1时表示S能胜,反之则负,即O胜。转移方程为当 i -r[j]>=0而且f【i - r[j]】=0(0 #include #include #include #include #include u

2012-02-29 23:01:57 1422

原创 UVa 531. Compromise

题目意思是找两个序列的最长公共子序列,并将其打印出来。题目难点就在于如何将公共序列打印出来。 法1:此处不能仅通过dp【i】【j】 ==dp【i-1】【j-1】+1就判断s1【i】在公共序列,应先将其他情况排除之后才能判断。#include #include #include #include #include using namespace std;int dp

2012-02-29 20:14:13 1009

原创 UVa 624. CD

这道dp题做了很久,如果只是输出最大值就很简单。   是一个0-1背包问题,只是体积和价值相等而已。本来没用多久就把路径打印出来了的,只是在最后一组测试数据上跟答案有点不同,因为该数据存在两种方案。题目也没说,所以就一直纠结着怎么输出答案的方案。后来还是将原来的代码交上去了,没想到竟然是在宥多种方案时随便打印一种即可的。 #include #include #include

2012-02-29 00:35:18 1373

原创 UVa 348. Optimal Array Multiplication Sequence

本题就是矩阵连乘,只是加了一个路径打印。开始在路径打印上一直没找到规律,最后看了别人的代码才恍然大悟,其实仔细想想也挺简单的。用一个数组记录下每次断开的具体位置,然后再用递归打印出具体步骤即可。 #include #include #include #include using namespace std;int dp[11][11],p[11][11],row[11]

2012-02-28 13:51:55 917

原创 UVa 562. Dividing coins

题目大意:有一堆各种面值的硬币,将所有硬币分成两堆,使得两堆的总值之差尽可能小。开始看到题目竟然很久都找不出状态和状态转移方程,几天没做题脑袋就生锈了。申请一个dp【50001】来记录该币值能否取得,可以当成0-1背包做。然后从sum/2开始往下遍历,直到第一个标记为1的币值结束,再算一下即可。 #include #include #include #include #in

2012-02-28 12:56:21 1589

原创 UVa 10192. Vacation

本来很简单的一道dp题,可是却WA了三次,后来将输入语句改成了getline( cin , s);就AC了,题目也没说可以有空格啊,真是的... #include #include #include #include #include #include using namespace std;int dp[105][105];string s1,s2;int main(

2012-02-26 00:40:25 1299 1

原创 sicily 4834. Party Location

已知在平面上有若干个点,求一个已知半径的圆最多更覆盖多少个点。一个比较经典的问题。(另一个为已知若干个点,求能覆盖住所有点的圆的最小半径。)两两点枚举,分别以两点为圆心,已知半径画圆,若相交,则求出两圆的一个交点(两边可任意,但是每两个圆的交点都要取同一边的),然后判断以交点为圆心已知半径为半径的圆能覆盖多少个点(在圆上也算)。逐个更新ans,直到枚举完全,最后ans的值即为能覆盖住的点的

2012-02-25 22:59:06 687

原创 UVa 10003.Cutting Sticks

本题大意为在给出的n个结点处切断木棍,并且在切断木棍时木棍有多长就花费多长的代价,将所有结点切断,并且使代价最小。开始在做时没有多想就开了一个1000*1000的数组,自己测试随便一个数据都可以,但是提交后却TLE了,估计是该题的测试案例相当多吧,不然也不会超了。后来在网上看了一下别人的答案,才猛地发现只用开一个50*50的数组就可以dp了,后来改了之后就AC。 #include

2012-02-24 21:30:54 1085

原创 UVa 674.Coin Change

经典dp问题,用记忆化搜索或者用递推(滚动数组)均可实现。 用滚动数组如下:#include #include using namespace std;int n;int f[7490];int a[5]={1,5,10,25,50};int main(){ int i,j; for(i=0;i<7490;i++)f[i]=1; //只由1组成均

2012-02-24 11:22:53 1457 1

原创 UVa 10405.Longest Common Subsequence

很简单的一个dp问题。用f【i】【j】表示s1的前i个字母和s2的前j个字母的公共最长子串,状态转移方程如下:f【i】【j】 =         f【i-1】【j-1】 +1,   if    s1【i-1】==s2【j-1】                             max( f【i-1】【j】,f【i】【j-1】), if   s1【i-1】!=  s2【j-1】

2012-02-24 00:55:26 531

原创 UVa 103.Stacking Boxes

dp,盒子嵌套问题。用edge【i】【j】二维数组来记录盒子i 能够嵌套到盒子j 中。在判断能否嵌套时,先将每个盒子的各个数据按从小到大排序,然后再逐项进行比较,如果每个数据都较小,则该盒子可被后者嵌套。用dp【i】表示从盒子i开始的最长盒子串。最后打印出最长盒子串时打出字典序最小的即可。 #include #include #include #include #i

2012-02-23 13:39:50 553

原创 sicily 1197. Hotel

dp问题:key[1..i]  与 w[1..j] 是否匹配?用状态f【i】【j】记录:状态转移方程如下:f【i】【j】=                     f【i-1】【j-1】                                                   if key【i】== ‘?’

2012-02-23 11:33:32 627

原创 sicily 1264. Atomic Car Race

//简单的dp//由于换胎后相当于又从原点开始跑,所以在计算直达所需时间时可以优化#include #include #include using namespace std;int main(){ int n,an[101],r; double b,v,e,f,dp[101],cost[10001]; //cost[i]表示换胎后(或从起始点)行驶距离i所需时间 whi

2012-02-20 20:58:54 1019

空空如也

空空如也

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

TA关注的人

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