LightOJ 1287
2016-05-11 15:53
190 查看
到一个点,可以向下走,可以在自己的地方停留5分钟,求期望。
公式不错
f[u]=(5+f[u])/(x+1)+(g[u][vi]+f[vi])/(x+1),1<=i<=x,x为合法的下一个点。。
#include <iostream>
#include <functional>
#include <algorithm>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <utility>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <limits>
#include <memory>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
using namespace std;
const double eps=1e-9;
double f[15][1<<15];
int vis[15][1<<15];
int g[15][15];
int n,m,INF=1e9;
int dfs(int u,int st)
{
if (st==(1<<n)-1)
{
f[u][st]=0;
return 1;
}
if (vis[u][st]) return f[u][st];
vis[u][st]=1;
f[u][st]=5;
int cnt=0,st0;
for (int i=0;i<n;i++)
{
if (!(st&(1<<i))&&g[u][i]!=INF&&dfs(i,st|(1<<i)))
{
int st0=st|(1<<i);
f[u][st]+=g[i][u]+f[i][st0];
cnt++;
}
}
if (cnt==0)
{
f[u][st]=0;
return 0;
}
f[u][st]/=cnt;
return 1;
}
int main()
{
int T,ncas=1;
scanf ("%d",&T);
while (T--)
{
memset(vis,0,sizeof(vis));
memset(f,0,sizeof(f));
for (int i=0;i<15;i++)
for (int j=0;j<15;j++)
g[i][j]=INF;
scanf ("%d%d",&n,&m);
while (m--)
{
int t1,t2,w;
scanf ("%d%d%d",&t1,&t2,&w);
g[t1][t2]=w;
g[t2][t1]=w;
}
dfs(0,1);
printf ("Case %d: %.10f\n",ncas++,f[0][1]);
}
return 0;
}
公式不错
f[u]=(5+f[u])/(x+1)+(g[u][vi]+f[vi])/(x+1),1<=i<=x,x为合法的下一个点。。
#include <iostream>
#include <functional>
#include <algorithm>
#include <complex>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <utility>
#include <bitset>
#include <cctype>
#include <cstdio>
#include <limits>
#include <memory>
#include <string>
#include <vector>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
using namespace std;
const double eps=1e-9;
double f[15][1<<15];
int vis[15][1<<15];
int g[15][15];
int n,m,INF=1e9;
int dfs(int u,int st)
{
if (st==(1<<n)-1)
{
f[u][st]=0;
return 1;
}
if (vis[u][st]) return f[u][st];
vis[u][st]=1;
f[u][st]=5;
int cnt=0,st0;
for (int i=0;i<n;i++)
{
if (!(st&(1<<i))&&g[u][i]!=INF&&dfs(i,st|(1<<i)))
{
int st0=st|(1<<i);
f[u][st]+=g[i][u]+f[i][st0];
cnt++;
}
}
if (cnt==0)
{
f[u][st]=0;
return 0;
}
f[u][st]/=cnt;
return 1;
}
int main()
{
int T,ncas=1;
scanf ("%d",&T);
while (T--)
{
memset(vis,0,sizeof(vis));
memset(f,0,sizeof(f));
for (int i=0;i<15;i++)
for (int j=0;j<15;j++)
g[i][j]=INF;
scanf ("%d%d",&n,&m);
while (m--)
{
int t1,t2,w;
scanf ("%d%d%d",&t1,&t2,&w);
g[t1][t2]=w;
g[t2][t1]=w;
}
dfs(0,1);
printf ("Case %d: %.10f\n",ncas++,f[0][1]);
}
return 0;
}
相关文章推荐
- 深入理解C++中的vector类的用法及特性
- OpenGL ES Shader相关API 总结【4】—— GLSL 语法小结【持续更新】
- 设计模式——抽象工厂模式
- 第10、11周 项目1 点-圆-圆柱的继承设计 (2)
- unity 手指移动物体旋转两个手指控制物体大小缩放
- 当spring报close不能手动控制和rollback不能手动控制
- c++分离式编译模型
- 操作系统——存储管理
- Uva 674
- 深入理解Java虚拟机学习总结(二) 垃圾收集器与内存分配策略
- extern、 const、static的理解
- -- 毛玻璃效果
- TI CC2541 BLE协议栈蓝牙MAC 地址
- native2ascii 国际资源文件编码
- C++遍历文件夹获取文件列表
- 柴俊理金:5月11日现货黄金、宁贵沥青操作策略
- MySQL 去掉字段中的换行和回车符
- javascript复习第二天删除元素节点
- pyinotify简单实用(用于文件系统监控)
- 链表的基本操作