51nod 1705七星剑 期望dp
来源:互联网 发布:网络老虎机赌博论坛 编辑:程序博客网 时间:2024/06/09 21:05
分析:一开始觉得可以正推,但是怎么都是WA。。不得已看正解,???高斯消元???,我当时就觉得肯定可以线性做,然后真让我找到了。。http://www.cnblogs.com/candy99/p/6518826.html
f[i]表示有i颗星的期望花费
f[i]=minf[i−1]+cj+(1−pi,j)∗(f[i]−f[gi,j])
这个dp比较显然了,直接做,时间复杂度n*7.
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;int n,m;const double eps=1e-9,inf=1e100;double p[10][505];int g[505][505],c[5005];double ans[10];inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}inline void dp(){ ans[0]=0; fo(i,1,7) { ans[i]=inf; fo(j,1,n) if (p[i][j]) { double tmp=ans[i-1]+c[j]-(1-p[i][j])*ans[g[i][j]]; ans[i]=min(ans[i],tmp/p[i][j]); } } printf("%.10lf",ans[7]);}int main(){ n=read(); fo(i,1,n)scanf("%d",&c[i]); fo(i,1,7) { bool flag=0; fo(j,1,n) scanf("%lf",&p[i][j]),flag|=(abs(p[i][j])>eps); if (!flag) { puts("-1"); return 0; } } fo(i,1,7) fo(j,1,n)g[i][j]=i-1-read(); dp();}
0 0
- 51nod 1705七星剑 期望dp
- 51nod 1705 七星剑(期望DP)
- 51nod 1450 闯关游戏 期望dp
- 51 nod 1705 七星剑(概率dp)
- 51NOD算法马拉松 七星剑 【dp】
- 51nod 1371 DP
- 51NOD 1296-dp
- 51nod (dp)
- 51nod 1050【DP】
- 51nod 1268【dp】
- 51Nod - 1043 dp
- 51Nod - 1270 dp
- 51Nod - 1406 dp
- 51Nod - 1376 dp
- 51nod 1183 (dp)
- 【dp】51nod
- 51nod 1202 dp
- 51nod 1101 DP
- PAT 1001 A+B和C Java解法
- Ecshop模板开发(二十八):列表页最新、最热、精品、促销商品显示
- LeetCode068 Text Justification
- android自动化测试CTS源码分析之三
- caffe 使用心得.
- 51nod 1705七星剑 期望dp
- C++里string转换为int
- Heap Sort
- 数组名到底是什么类型的一个量?
- LeetCode069 Sqrt(x)
- LZO词典压缩器实现(含界面)
- ubuntu下python调用C/C++方法之动态链接库
- 51Nod-1262-扔球
- swustoj表达式转换(0309)