描述 Description
  打开了黑魔法师Vani的大门,队员们在迷宫 般的路上漫无目的地搜寻着关押applepi的监狱的所在地。突然,眼前一道亮光闪过。“我,Nizem,是黑魔法圣殿的守卫者。如果你能通过我的挑战, 那么你可以带走黑魔法圣殿的地图……”瞬间,队员们被传送到了一个擂台上,最初身边有一个容量为K的包包。
  擂台赛一共有N项挑战,各项挑战依
次进行。第i项挑战有一个属性ai,如果ai>=0,表示这次挑战成功后可以再获得一个容量为ai的包包;如果ai=-1,则表示这次挑战成功后可
以得到一个大小为1 的地图残片。地图残片必须装在包包里才能带出擂台,包包没有必要全部装满,但是队员们必须把 【获得的所有的】地图残片都带走(没有
得到的不用考虑,只需要完成所有N项挑战后背包容量足够容纳地图残片即可),才能拼出完整的地图。并且他们至少要挑战成功L次才能离开擂台。
  队员们一筹莫展之时,善良的守卫者Nizem帮忙预估出了每项挑战成功的概率,其中第i项挑战成功的概率为pi%。现在,请你帮忙预测一下,队员们能够带上他们获得的地图残片离开擂台的概率。

题解:
三维DP,只不过下标有负数比较麻烦,无奈写了p(貌似c++用个宏就ok了?)
枚举每个状态,按输赢来递推即可。吐槽一下此题数据是有多弱,按理说应该开20W*2*200的数组,M成翔,改成500*2*200就过了。。。
代码:

 var i,j,k,n,l,t,mx:longint;
a,b:array[..] of longint;
f:array[..,-..,..] of double;
ans:double;
begin
read(n);read(l);read(mx);
for i:= to n do read(b[i]);
for i:= to n do read(a[i]);
f[,mx,]:=1.0;t:=;
for i:= to n do
begin
t:=-t;if(a[i]>)then inc(mx,a[i]);
for j:=-n to mx do
for k:= to i do
begin
f[t,j,k]:=f[-t,j,k]*(-b[i])/;
if(k>)then f[t,j,k]:=f[t,j,k]+f[-t,j-a[i],k-]*b[i]/;
end;
end;
for i:= to mx do for j:=l to n do ans:=ans+f[t,i,j];
writeln(ans::);
end.

hzwer的做法比较好:

首先因为n最大为200,所以背包容量大于200是没有意义的
所以用f[i][j][k]表示前i场胜j场背包容量k的概率
为了防止容量变成负数
可以对挑战进行排序
代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<set>
#include<vector>
#include<algorithm>
#define inf 1000000000
#define ll long long
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,l,K;
double f[][][];
double ans;
struct data{double p;int v;}a[];
bool operator<(data a,data b)
{
return a.v>b.v;
}
int main()
{
//freopen("guard.in","r",stdin);
//freopen("guard.out","w",stdout);
n=read();l=read();K=read();
for(int i=;i<=n;i++)
{
scanf("%lf",&a[i].p);
a[i].p/=;
}
for(int i=;i<=n;i++)a[i].v=read();
sort(a+,a+n+);
f[][][min(K,)]=;
for(int i=;i<n;i++)
for(int k=;k<=i;k++)
for(int j=;j<=n;j++)
{
f[i+][k][j]+=f[i][k][j]*(-a[i+].p);
int t=j+a[i+].v;
if(t<)continue;
t=min(t,n);
f[i+][k+][t]+=f[i][k][j]*a[i+].p;
}
for(int i=;i<=n;i++)
for(int j=l;j<=n;j++)
ans+=f[n][j][i];
printf("%.6lf",ans);
return ;
}

[Poetize I]守卫者的挑战的更多相关文章

  1. 【TYVJ1864】[Poetize I]守卫者的挑战 概率与期望

    [TYVJ1864][Poetize I]守卫者的挑战 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过."我 ...

  2. tyvj P1864 [Poetize I]守卫者的挑战(DP+概率)

    P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...

  3. TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)

    题目链接...无 题目: P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们 ...

  4. Tyvj 1864 [Poetize I]守卫者的挑战

    P1864 [Poetize I]守卫者的挑战时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻 ...

  5. Tyvj——P1864 [Poetize I]守卫者的挑战

    来源:http://www.tyvj.cn/p/1864 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Niz ...

  6. tyvj1864 [Poetize I]守卫者的挑战

    期望dp 不考虑打的顺序,只要最后能把地图都装下就行了,因此把概率和容量装进一个结构体里面,把地图放后面. 记一个状态f[i][j][k]表示前i个比赛,赢了j场,容量k的期望,转移即可. #incl ...

  7. TYVJ1864 守卫者的挑战

    P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...

  8. TYVJ-P1864 守卫者的挑战 题解

    P1864 [Poetize I]守卫者的挑战 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜 ...

  9. 【BZOJ3029】守卫者的挑战 [期望DP]

    守卫者的挑战 Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 打开了黑魔法师Vani的大门,队 ...

随机推荐

  1. PHP Ctype函数(转)

    Ctype函数是PHP内置的字符串体测函数.主要有以下几种 ctype_alnum -- Check for alphanumeric character(s)检测是否是只包含[A-Za-z0-9] ...

  2. 解决Xcode6.0.1编译Unity3Dproject报错

    错误信息大概例如以下 Undefined symbols for architecture i386: "_clock$UNIX2003",.....等 大概就是引用了一个链接库出 ...

  3. Swift的闭包(一):闭包简介、闭包表达式的优化

    定义:Closures are self-contained blocks of functionality that can be passed around and used in your co ...

  4. Android(java)学习笔记246:ContentProvider使用之学习ContentProvider(内容提供者)的目的

    1.使用ContentProvider,把应用程序私有的数据暴露给别的应用程序,让别的应用程序完成对自己私有的数据库数据的增删改查的操作. 2.ContentProvider的应用场景: 获取手机系统 ...

  5. jQuery代码优化 事件委托篇

    <转自 http://www.jb51.net/article/28770.htm> 参考文章:  解密jQuery事件核心 - 绑定设计(一) 参考文章:  解密jQuery事件核心 - ...

  6. 将JSON数组显示前台Table中

    将JSON数组显示前台Table中 在最近的学习中遇到一个小问题,如何把JSON数组显示在前台的table中,经过一番借鉴和学习之后终于解决了这个问题.具体的代码如下: (前提:利用ajax获取过来的 ...

  7. 1、第1课.net学习2150916

    HTML标签 1.<p> <p> 标签 段落标签 2.<h1-6></h1> 文字标签从1-6 3. <i></i> 斜体 &l ...

  8. 生成package.json和bower.json

    1.安装nodejs 2.安装bower工具   cmd:npm bower install 3.生成package.json  cmd:npm init 4.生成bower.json cmd:bow ...

  9. My First Blog.

    I just wanna mark my first blog in order to have a wonderful memories in the future.

  10. Content-Disposition的使用和注意事项

    转载:http://www.cnblogs.com/jzaileen/articles/1281025.html 最近不少Web技术圈内的朋友在讨论协议方面的事情,有的说web开发者应该熟悉web相关 ...