上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 32 下一页
摘要: 状态压缩DP题意:输入n,m,一个n*n的棋盘,放入m个国王,国王不能相互攻击,有多少种放置的可能。国际象棋的国王的攻击范围就是它周围的一圈,一共8个格子(上下左右四个对角)和 poj 1185 炮兵布阵 非常相似 , 同样使用位运算加速,同样可以使用滚动数组代码有详细注释/*state[i]表示第i种状态,即一行内的国王不互相攻击的状态,king[i]对应这种状态有多少个国王关于相邻两行的状态是否能共存的问题,也就是两行的国王会不会相互攻击,state[k]表示第i行的状态,state[kk]表示第i-1行的状态state[k] & state[kk] = 1 , 说明在某一列上有国 阅读全文
posted @ 2013-03-07 23:03 Titanium 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 动态规划1.先考虑在1到n的村长里面放一个邮局的最优解,那么就是把邮局放在最中间的那个村庄处最优(若村庄数为偶数则最中间的村庄有两个哪个都可以)2.当放m个邮局的时候,其他每个邮局相当于有一个控制范围,范围内的村庄离该邮局最近,那么m个邮局会把n个村庄分为m块,我们就是dp每一块,令每一块的值最优,以及加上还没有处理的大块的最优解,则是我们要的答案dp[i][j]表示从1号到i号村庄放j个邮局的最优解方程:dp[i][j]=min{ dp[k-1][j-1]+s[k][i] } s[k][i]表示在k号村庄到i号村庄放1个邮局的最优解,也就是放在最中间记忆化搜索/*dp[i][j]=min{. 阅读全文
posted @ 2013-03-06 15:51 Titanium 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 贪心 or 动态规划题目是归在动态规划里面的,但是看完之后觉得是贪心,而且貌似是水题,不知道为什么会把难度定为400多,觉得定为100多可以了题意:输入a,b,表示有b-a+1个数,然后给出这n个数,将他们划分成几块,每块都是单调递增的或者单调递减,问块数最少是多少贪心:首先处理一下原序列中相邻的数字不能相同,一开始没有做这个处理是WA的,处理后AC。所以题目的意思应该是指严格单调,相同的部分是不算在里面的(个人理解,否则没法解释这个WA)。好像1 2 3 3 3 3 4 是变为1 2 3 4 阅读全文
posted @ 2013-03-05 19:08 Titanium 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 动态规划题意:让你猜一个物品的价格,猜低了或者猜高了都会提示你。G,L,表示你有G次机会猜一个数,如果猜错了,G会减少1次,如果你的错误是应该是猜高了,那么L也会少一次(猜低了L不会少)。如果G次机会都用完了,则输;若G次机会还有剩余,而L次机会用完了,这时再猜一个数,若猜高了,那么也输了。让你确定一个数字N,以保证在G,L的条件下,你一定能猜到[1,N]以内的任何一个数1.如果L等于0,也就是说你在猜的过程中,绝对不能猜高,所以你只能从1开始猜,并依次为2,3,4……最大能猜到的数是G,所以N=G,这样才能保证你一定能猜到其中的任何一个数2.L>G,这是个迷惑的情况,其实L比G大是没意 阅读全文
posted @ 2013-03-05 19:05 Titanium 阅读(646) 评论(2) 推荐(0) 编辑
摘要: 动态规划一开始定义为dp[l1][l2][l3][dd],表示用l1个{},l2个[],l3个(),深度为dd的方案数,后来不行。参考别人后,dp[l1][l2][l3][dd]表示深度小于等于dd的方案数,那么答案是dp[l1][l2][l3][dd]-dp[l1][l2][l3][dd-1]可以用分块和整块的思想来看这个问题好像[[()][]] 这类的我们可以说它是整块,[][](),这类的我们可以说它是分块,我们在构建的dp数组的时候就是把其当做是分块来处理,然后使用乘法原理例如dp[l1][l2][l3][dd],我们可以先构建一个小分块,用小分块的方案数*其实括号能组成的方案数,而这 阅读全文
posted @ 2013-03-03 11:20 Titanium 阅读(601) 评论(0) 推荐(0) 编辑
摘要: 动态规划poj 1141 ural 1183 zoj 1463 都是相同的题目,黑书DP的例题输入比较恶心,有空串。递推的时间是1s多,记忆化的时间是4.3s勉强过,原理不说了百度各种有/*1.dp[i][j]=dp[i+1][j-1] , p[i][j]=-1 , --->p[i+1][j-1]2.dp[i][j]=dp[i+1][j]+1 , p[i][j]=-2 , --->p[i+1][j]3.dp[i][j]=dp[i][j-1]+1 , p[i][j]=-3 , --->p[i][j-1]4.dp[i][j]=dp[i][k]+dp[k+1][j] , p[i][ 阅读全文
posted @ 2013-03-02 23:46 Titanium 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 动态规划也是经典题目,黑书上也有介绍。今晚上JAVA在想,想了一下想出来,需要五维,大矩形的值由小矩形得到,这个状态转移方程个人感觉还是比较想到,但是一些细节的地方还没想到怎么处理,回来瞄一眼黑书得到了标准差的一个转化公式,所以疑团解开,便开始打代码(看黑书过程中它写的状态转移方程和我想的一样,但是有一些细微的细节,我感觉我这样处理比较保险,我后来细想了一下它的,虽然没有判断但是可能也不会出错,但是更倾向于我自己想的那种,就是关于横着切和竖着切的范围)忘记搞掉注释WA了一次,搞掉后就AC了,算是 一次成型不用debug,后来上网找报告,大家几乎都是用double来开数组的,其实不用double 阅读全文
posted @ 2013-02-27 23:41 Titanium 阅读(1780) 评论(0) 推荐(2) 编辑
摘要: 状态压缩DP(使用位运算加速)这是个经典的状态压缩DP,为加深印象详细写写一下报告,由于是中文题目所以不说题意了思考方法:首先,一个炮的攻击有两行,所以对于第i行来讲,i-1行和i-2行对它有影响,i-3行及以上的都没有影响了,所以我们要得到第i行的信息,只需要知道i-1和i-2的信息(最近有个体会,DP要找到什么因素影响了当前你要求的东西,有影响的我们就处理,没影响的我们不用管)。接着我们就思考怎么表示状态。山用1表示,空地用0表示,空地放了兵也用1表示,那么对于一行,就是一个01的串,这是个二进制数,我们可以想到状态压缩压缩回来一个十进制数。比如原地图01101011,那么0处可以放兵,所 阅读全文
posted @ 2013-02-27 15:27 Titanium 阅读(3309) 评论(2) 推荐(2) 编辑
摘要: DP经典问题,石子合并描述:在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。/*石子合并问题由于石子是未成一圈,所以首先我们要把圆圈剪断变成一条直线,而这样的直线有n条(每个石子都可以作为直线的开头)接下来我们就考虑直线的石子合并问题,这个其实就是矩阵链乘法dp[i][j]=min{ dp[i][k]+dp[k+1][j]+cost } cost为本次合并带来的代价,cost=ai+ai+1+ai+2……aj*/#include 阅读全文
posted @ 2013-02-25 16:31 Titanium 阅读(1119) 评论(0) 推荐(0) 编辑
摘要: DP(经典题):字符串最短编辑距离关于计算最短编辑距离的资料有很多,这里不详说,这题还要求输出路径,并且注意到是实时的输出,关键在于输出中的那个数字,即位置代码中已经有详细分析/*dp[i][j]表示a串前i个字符和b串前j个字符的最短编辑距离1.dp[i][j]=dp[i-1][j]+1 即先删除a串的第i个字符,然后使其前i-1个字符与b串的前j个字符相同2.dp[i][j]=dp[i][j-1]+1 即先让a串的前i个字符和b串的前j-1个字符相同,然后再在a串后面插入b[j]这个字符3.dp[i][j]=dp[i-1][j-1]+(a[i]==b[j]?0:1) 即先让a串前i-1.. 阅读全文
posted @ 2013-02-25 15:25 Titanium 阅读(738) 评论(0) 推荐(0) 编辑
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 32 下一页