ural 1716
2014-03-20 23:08
232 查看
代码一:
代码二:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=5005; double dp ; int main() { int n,s; cin>>n>>s; int y=s-n-n,x=n-y; // printf("%.7lf\n",1.0*(2*y+1)*x/(x+y)); for(int i=0;i<=x;++i) { for(int j=0;j<=y;++j) { if(i==0) dp[i][j]=0; else if(j==0) dp[i][j]=1; else dp[i][j]=(dp[i][j-1]*j+dp[i-1][j]*i+2.0*i*j/(i+j-1))/(i+j); } } printf("%.7lf\n",dp[x][y]); return 0;
代码二:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <cstdlib> #include <cmath> #include <queue> #include <vector> #include <map> #define pb push_back #define mp make_pair #define eps 1e-9 #define zero(x) (fabs(x)<eps) #define pi acos(-1.0) #define f1 first #define f2 second const int inf=0x3f3f3f3f; const long long INF=1LL<<50; using namespace std; typedef long long LL; typedef pair <int,double> PII; #define N 5002 double f[2] [2]; int n,s,no,ye; //f [yes][last] void doit() { ye=s-n*2; no=n-ye; //printf("~~%d %d\n",no,ye); memset(f,0,sizeof(f)); f[0][0][1]=1; double ans=0; for (int i=0;i<n;i++) {int o=i&1; memset(f[o^1],0,sizeof(f[o^1])); for (int j=0;j<=ye;j++) { double p1,p0; p1=(ye-j)/double (n-i); p0=1-p1; f[o^1][j+1][1]+=f[o][j][1]*p1; f[o^1][j][0]+=f[o][j][1]*p0; ans+=f[o][j][1]*p0; f[o^1][j+1][1]+=f[o][j][0]*p1; ans+=f[o][j][0]*p1; f[o^1][j][0]+=f[o][j][0]*p0; } } printf("%.7lf\n",ans); } int main() { while (scanf("%d%d",&n,&s)!=EOF) doit(); }
相关文章推荐
- Android 使用开源框架AsyncHttpClient上传文件到服务器
- JS字随鼠标移动,伸缩菜单,搜索引擎,删表格列
- 结构体和多文件编程
- 开发模式配置,不用每次重启tomcat,java web基础
- lightoj1045 - Digits of Factorial(数论)
- CV_EXPORT定义的作用,lib及dll的区别
- 强制重启N种方法
- 强制重启N种方法
- LeetCode 各题目难度已经面试频率
- 在php中集成xdebug(windows平台)
- 添加web引用和添加服务引用有什么区别?
- NYOJ NO.305 表达式求值
- netbeans跟eclipse的细节对比
- 003_002 Python 获取上一个周几,如周五,星期五
- GridView的各种用法
- 除了重装,解决问题的另一手段
- coursera 中计算概论的第四周 B-03作业
- SQL的内连接与外连接
- BAT 批处理脚本 教程
- 前 言