接着上面的问题,如果这个矩阵中有阻塞的障碍,就不能用前面的那种组合数的方法了,因为很多位置实际上是没有路的嘛。
剩下的合理解法只有dp了。跟那个求最小和的非常像,从右下角往前推算,对于一个位置(i, j),它的走法应该是(i+1, j)和(i, j+1)走法的和。对于边界条件还是有一些特殊,最后一行,从右往左,如果是0的话没有问题,等于右侧走法的个数,一旦遇到一个1,那么它以及它左边的走法都必须...
分类:
其他好文 时间:
2014-05-14 01:00:13
阅读次数:
305
从左上到右下,只能向右或向下,问一共有多少种走法。
这个问题当然可以用递归和dp来做,递归的问题是很可能会超时,dp的问题是需要额外空间。
其实没有其他限制条件的话,这个问题有个很简单的解法。给定一个格子,假设是m*n的,从左上角走到右下角的总步数是确定了的,(m+n-2)嘛,即在竖直方向一定要走m-1步,在水平方向一定要走n-1步。那有多少种解法就相当于确定什么时候往下走,什么时候往右走,也...
分类:
其他好文 时间:
2014-05-14 00:41:02
阅读次数:
447
题目来源:POJ 2992 Divisors
题意:。。。
思路:素数分解的唯一性 一个数可以被分解成若干素数相乘 p1^x1*p2^x2*...*pn^xn
根据乘法原理 因子数为 (x1+1)*(x2+1)*...*(xn+1)
不能直接求出组合数 会溢出 也不能把每个乘的数分解因子 这样会超时
C(N,M)=N!/(M!*(N-M)!)
另dp[i][j] 代表为i的阶乘中j因子...
分类:
其他好文 时间:
2014-05-13 09:28:07
阅读次数:
207
题意:计算a-b中各个数字出现的个数;
解法:数位dp(思想都是先算1-b的个数,然后减掉1-a中的个数),1-9数字的计算和前边计算1的那一篇数位dp差不多,计算0时候要加一维表示前缀是否全是0;
代码:/******************************************************
* author:xiefubao
*****************...
分类:
其他好文 时间:
2014-05-12 23:51:12
阅读次数:
470
dp[ i][j]=max(四个方向点)+1;
四个方向上的点应该存在,且大于i,j,表示以i,j开始的点最长路径,递归的结束条件不用判断,因为 dp[][]最大数位置肯定
直接结束,随后次大值肯定能结束,以此类推,所以可以执行,但自下而上动态规划不好写。因为要确定这些数的大小,麻烦。 #inclu...
分类:
其他好文 时间:
2014-05-12 21:21:23
阅读次数:
323
题意:让你炒股票,每天都有买进的额度和价格以及卖出的额度和价格,并规定时间和最多的持有股票是多少,而且买卖操作要隔w+1天求最高的利润
思路:显然分三种情况:不买不卖,买,卖,设dp[i][j]表示第i天持有j股票的最高利润
如果不买不卖的话就是:dp[i][j]=dp[i-1][j]
买: dp[i][j]=max(dp[i][...
分类:
其他好文 时间:
2014-05-11 21:18:05
阅读次数:
323
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1109
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean...
分类:
其他好文 时间:
2014-05-11 20:57:36
阅读次数:
400
题意:求1-n的n个数字中1出现的个数。
解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不可以随意取,true为没降,true为已降);常规的记忆化搜索
代码:/******************************************************
* author:xiefubao
...
分类:
其他好文 时间:
2014-05-11 20:48:20
阅读次数:
279
题目链接:10497 - Sweet Child Makes Trouble
题意:n个物品,原来物品属于一个地方,现在要把物品重新放回去,问能放几种使得每个物品都与原来位置不同
思路:递推,一开始随便搞了个二维状态,dp[i][j]表示i个物品,有j个位置不同,那么dp[n][n]就是答案,递推式为:
dp[i][j] = 1 (j == 0)
dp[i][j] = (j - 1) * ...
分类:
其他好文 时间:
2014-05-11 20:25:48
阅读次数:
433
题目链接:580 - Critical Mass
题意:一个栈,里面可以放L和U,有三个连续的U就是不安全的,问共有几种不安全的情况
思路:dp,dp[i][j][k],表示放到第i个,最后两个状态为j,k表示有没有出现不安全。然后去记忆化搜索一下就可以了
然后还有一种做法是,先考虑安全的情况,在用总情况(1
不过这题都没给数据范围,不过数据其实并不大,不然计算的时候种数一下就会超过范围了...
分类:
其他好文 时间:
2014-05-11 20:10:18
阅读次数:
372