摘要: 数学题(概率基本知识+DP记忆化搜索实现)题意:概率题:丢n个骰子,和大于等于x的概率是多少,用反面来求,1-小于x的概率首先丢n个骰子,可以看做是依次丢的(独立重复试验),每次丢的点数记录下来,比如3个筛子123和132是不同的,所以就是一个排列(而不是组合),那么总的可能为6^n,要用long long 保存。然后再找出有多少个排序和和是小于x的。这个找特殊排列的过程用DP来构建才不能超时(我用的是记忆化搜索,当然递推也是可以的,仿照记忆化搜索来写的,个人更倾向于记忆化搜索,容易理解,而且应该很多没用的状态不会去到,但是递推会推出所有状态)记忆化搜索,开一个二维数组dp[i][j],表示现 阅读全文
posted @ 2012-12-25 21:02 Titanium 阅读(350) 评论(0) 推荐(0) 编辑
摘要: DP(DAG上的DP)题意:给你一个目标金额n,有5种硬币50,25,10,5,1,每种硬币无限个,用这些硬币构成这个目标金额n,有多少种不同的构建方法看做一个有向图处理:好像11能减去5得到6,那么有向边11--->6,同样11减10可以得到1,那么有有向边11--->1其实其他就是问n到0有多少条不同的路径。下面是注意处理的问题好像6,1+5和5+1是一样的只能算为一种情况。没了防止这种情况我们采用减序构建,好像5511是唯一一种它是减序的,5151这些就不是了这样做就不会重复,但是有可能漏掉,所以要记录前驱用的是哪一种硬币这样做不仅能防止重复还能防止遗漏,具体看代码另外一点, 阅读全文
posted @ 2012-12-25 19:44 Titanium 阅读(638) 评论(0) 推荐(0) 编辑
摘要: 水题(不知道归在哪一类)无意间看到的一题…………觉得比较水有比较无聊就AC了,本来想写二分的后来发现没必要,就一个线性扫描过去即可从大到小排序,每次在两堆糖果里面轮流取,其中一堆取完后就取接下来的那一堆,取到最后结束。看最后剩下多少个糖果,<2成功,否则失败从小到大排序是不行的#include <cstdio>#include <cstring>#include <algorithm>#define N 1000010using namespace std;int a[N],n;int cmp(int p ,int q){return p>q?1 阅读全文
posted @ 2012-12-25 19:00 Titanium 阅读(164) 评论(0) 推荐(0) 编辑