摘要: //hdoj 3555//2013-06-27-16.53#include #include __int64 dp[21][3], n;int len, bit[21];//dp[i][0] 长度为i 包含49的个数//dp[i][1] 长度为i没有49但以9开头的//dp[i][2] 长度为i 没有49void init(){ dp[0][2] = 1; for (int i = 1; i 4) ans += dp[i-1][1]; if (bit[i] == 9 && bit[i+1] == 4) ... 阅读全文
posted @ 2013-06-27 17:00 xindoo 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 这题数据量相对比较小,可以暴力打表解决。不过我这里用数位dp 刚开始学数位dp,参考了别人的代码。//2013-06-27-15.30#include #include int dp[7][3];//dp[i][0] 表示不存在不吉利的数字//dp[i][1] 表示不存在不吉利的数字,且最高位是2//dp[i][2] 表示存在不吉利的数字int bit[10];void init(){ dp[0][0] = 1; for (int i = 1; i 4) //高位可能出现4的情况 ans += dp[i-1][0]; if (!flag &... 阅读全文
posted @ 2013-06-27 15:42 xindoo 阅读(166) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1664 这题可以用递归的方式做,想给第一个盘子里放上苹果从(0到m),然后给第二个放上,为了保证每次产生的放法是不同的,第二个里面放置的苹果不能从0开始,否则就会产生相同的放法,然后同理第三第四个盘子。。。。 还有一个问题,可能放到最后一个盘子了,还有很多苹果没有放,怎么办?? 都放最后一个里面?? 其实不是,这样的话可能和前面某种情况出发,所以在放置的过程中就要保证不能产生这种情况,(y/(n-x) >= i)这行代码就保证了,因为盘子里面的苹果数是非递减的,剩余i个盘子,只要剩余的苹果数除以剩余的盘子数不小于当前盘子的苹果数,就可 阅读全文
posted @ 2013-06-27 14:49 xindoo 阅读(202) 评论(0) 推荐(0) 编辑