HDU 4336 Card Collector(概率)
2013-05-05 13:15
204 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336
题意:有n种硬币,每个硬币出现的概率为pi。每次取一个。求收集n种硬币的取的次数期望。
思路:直接按位枚举 。比如f[1101]=1+p0*f[1100]+p2*f[1001]+p3*f[0101]+(1-p0-p2-p3)*f[1101]。
题意:有n种硬币,每个硬币出现的概率为pi。每次取一个。求收集n种硬币的取的次数期望。
思路:直接按位枚举 。比如f[1101]=1+p0*f[1100]+p2*f[1001]+p3*f[0101]+(1-p0-p2-p3)*f[1101]。
import java.util.*; import java.text.*; import java.math.*; public class Main{ static double EPS=1e-10; static double PI=Math.acos(-1.0); static double p[]=new double[25]; static double f[]=new double[1<<20]; static int n; public static void PR(String s){ System.out.println(s); } public static void PR(double s) { java.text.DecimalFormat d=new java.text.DecimalFormat("#.0000000"); System.out.println(d.format(s)); } public static double cal() { int i,j,k; double temp,sum; f[0]=0; for(i=1;i<(1<<n);i++) { temp=1; sum=0; for(j=0;j<n;j++) if((i&(1<<j))!=0) { temp+=p[j]*f[i^(1<<j)]; sum+=p[j]; } f[i]=temp/sum; } return f[(1<<n)-1]; } public static void main(String[] args){ Scanner S=new Scanner(System.in); int i; while(S.hasNext()) { n=S.nextInt(); for(i=0;i<n;i++) p[i]=S.nextDouble(); double ans=cal(); PR(ans); } } }
相关文章推荐
- HDU 4336 Card Collector 概率dp 状态压缩| 容斥原理
- hdu 4336 Card Collector (概率与期望)
- HDU 4336 Card Collector(概率DP+状压)
- HDU 4336 Card Collector [概率DP]
- hdu 4336 Card Collector 概率dp+状态压缩
- HDU 4336 Card Collector (概率dp)
- HDU 4336 Card Collector(状态压缩+概率DP)
- HDU - 4336 Card Collector(概率dp)
- HDU 4336-Card Collector(状压,概率dp)
- hdu 4336 Card Collector (概率dp+位运算 求期望)
- HDU 4336 Card Collector(动态规划-概率DP)
- hdu 4336 Card Collector (概率dp)
- HDU 4336 Card Collector 状态压缩+概率DP
- Hdu 4336 Card Collector (状态概率DP|容斥原理)
- hdu 4336 Card Collector(概率dp, 容斥原理)
- HDU 4336 Card Collector(动态规划-概率DP)
- HDU 4336 Card Collector (概率DP 或 容斥原理)
- HDU 4336 Card Collector [状态压缩概率DP]
- HDU 4336 Card Collector(动态规划-概率DP)
- HDU 4336 Card Collector 状压+概率dp