BSOJ8163题解
看到值域很小而且时限 4s 以为是什么高明的依赖值域的复杂度,结果就是优化 DP。
考场上只想到了 的还是太菜了。
设 表示 这个区间中 赢得最终胜利的概率。容易有 转移。
但是很显然 左边的人不可能与右边的人对战,所以 和 这两个区间是完全独立的。
也就是说 , 表示 这个区间中 取得了最终的胜利, 定义相反。
转移:
类似。
设 ,那么有:
没了。复杂度 。注意边界。
#include<cstdio>
#include<cctype>
namespace SOLVE{
typedef double db;
const int M=505;
int n,k,a[M];db F[M][M],G[M][M],H[M][M];
inline void main(){
scanf("%d%d",&n,&k);for(int i=1;i<=n;++i)scanf("%d",a+i),F[i][i]=G[i][i]=1;
for(int t=2;t<=n;++t){
for(int l=1,r=t;r<=n;++l,++r){
for(int i=l;i<r;++i)H[l][r]+=G[l][i]*F[i+1][r];
for(int i=l;i<r;++i)F[l][r]+=1.*a[r]/(a[i]+a[r])*F[l][i]*H[i][r];
for(int i=r;i>l;--i)G[l][r]+=1.*a[l]/(a[i]+a[l])*H[l][i]*G[i][r];
F[l][r]/=r-l;G[l][r]/=r-l;
}
}
printf("%.10lf",F[1][k]*G[k][n]);
}
}
signed main(){
SOLVE::main();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】