摘要:
题意:给出银行的个数和被抓概率上限。在给出每个银行的钱和抢劫这个银行被抓的概率。求不超过被抓概率上线能抢劫到最多的钱。 dp题,转移方程 dp[i][j] = min(dp[i-1][j] , dp[i-1][j-v[i]]) ,dp[i][j]表示前 i 个银行抢劫到 j 这么多钱被抓的概率。 初始化时 dp[0][0] = 0 , 因为 dp[0][1~n]是不可能的情况,dp[0][1~n]=-1。 #include#define maxn 110#define min(a,b) (a)>(b)?(b):(a)double a[maxn];int v[maxn];double f. 阅读全文
摘要:
题意:给一个数,用这个数的因数除以这个数,直到为1时,求除的次数的期望。 设一个数的约数有M个,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(E[a[M]]+1)/M 一个数最大的约数是它自己。 则有,E[n] = (E[a[1]]+1)/M+(E[a[2]]+1)/M+...+(n+1)/M (M-1)*E[n]=E[a[1]]+E[a[2]]+...+E[a[M-1]]+M#include#include#define maxn 100010double dp[maxn];void Init(){ dp[1]=0; for(int ... 阅读全文
摘要:
题意:给定一个一年的天数,求最少多少人可以使至少两人生日同一天的概率不少于0.5。 用二分去做。检验一个数是否符合时,刚开始实用普通的方法,直接计算,超时了~~,上网搜了一下代码,一位大神使用一个数组保存n!,因为阶乘的上升速度太快,100!就已经很大了,题目范围是到10W,直接保存肯定是要超啊~~,取对数就可以了。 #include#include#define maxn 100010double s[maxn],t;double fun(int num,int y){ return s[y]-((s[y]-s[y-1])*num+s[y-num]);}int check(in... 阅读全文
摘要:
递推,倒着递推。 #include#define maxn 1010#define min(a,b) (a)>(b)?(b):(a)int main(){ int T,n,cas=1; int a[maxn]; double f[maxn]; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); f[n]=a[n]; for(int i=n-1;i;i--) { ... 阅读全文
摘要:
一道数学期望题,唉唉,概率论学的不好啊~~ 求走出迷宫的期望时间。 由于有的门会回到起点,所以有可能会走很多遍,设能走出去的门的个数为n1,总的个数为n,那么一次走出去的概率为n1/n,走一次的用的平均时间是sum(t)/n,期望的次数为n/n1。 时间期望是:(sum(t)/n)*(n/n1)=sum(t)/n1。#includeint gcd(int a,int b){return b?gcd(b,a%b):a;}int main(){ int T,cas=1;; int n,n1,sum,a; scanf("%d",&T); while(T--) ... 阅读全文