题目:https://www.luogu.org/problemnew/show/P1850

注释掉了一堆愚蠢,自己还是太嫩了...

首先要注意选或不选是取 min 而不是 /2 ,因为这里的选或不选不是随机的而是取最优的;

然后注意 double 类型不能 memset ,还是要手动赋值;

其实也不算很难,却调了很久...

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=;
int n,m,v,e,dis[][],c[maxn],d[maxn];
double p[maxn],f[maxn][maxn][],ans;
int rd()
{
int ret=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return ret*f;
}
int main()
{
n=rd(); m=rd(); v=rd(); e=rd();
for(int i=;i<=n;i++)c[i]=rd();
for(int i=;i<=n;i++)d[i]=rd();
for(int i=;i<=n;i++)scanf("%lf",&p[i]);
memset(dis,0x3f,sizeof dis);
for(int i=,x,y,z;i<=e;i++)
{
x=rd(); y=rd(); z=rd();
dis[x][y]=min(dis[x][y],z); dis[y][x]=dis[x][y];//
}
for(int i=;i<=v;i++)dis[i][i]=;//!!!
for(int k=;k<=v;k++)
for(int i=;i<=v;i++)
for(int j=;j<=v;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
// memset(f,1,sizeof f);//!!!
// for(int j=0;j<=m;j++)
// {
// f[n][j][0]=0; f[n][j][1]=0;
// }
// for(int i=n-1;i;i--)
// for(int j=0;j<=m;j++)
// {
// f[i][j][0]=(f[i+1][j][0]+f[i+1][j][1])/2+(p[i-1]*dis[d[i]][c[i+1]]+(1-p[i-1])*dis[c[i]][c[i+1]]);
// if(j)f[i][j][1]=(f[i+1][j-1][0]+f[i+1][j-1][1])/2+
// p[i]*(p[i-1]*dis[d[i]][d[i+1]] + (1-p[i-1])*dis[c[i]][d[i+1]])/2
// +(1-p[i])*dis[c[i]][c[i+1]]/2;
// }
// printf("%lf",f[1][m][0]+f[1][m][1]);
for(int i=;i<=n;i++)//手动memset
for(int j=;j<=m;j++)
for(int k=;k<=;k++)f[i][j][k]=0x3f3f3f3f;
f[][][]=; f[][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m&&j<=i;j++)
{
f[i][j][]=min(f[i-][j][] + dis[c[i-]][c[i]],
f[i-][j][] + (-p[i-])*dis[c[i-]][c[i]] + p[i-]*dis[d[i-]][c[i]]);
if(j)
f[i][j][]=min(f[i-][j-][] + (-p[i])*dis[c[i-]][c[i]] + p[i]*dis[c[i-]][d[i]],
f[i-][j-][] + (-p[i-])*(-p[i])*dis[c[i-]][c[i]] + p[i-]*p[i]*dis[d[i-]][d[i]] +
(-p[i-])*p[i]*dis[c[i-]][d[i]] + p[i-]*(-p[i])*dis[d[i-]][c[i]]);
}
ans=0x3f3f3f3f;
for(int j=;j<=m;j++)
ans=min(ans,min(f[n][j][],f[n][j][]));
printf("%.2lf",ans);
return ;
}

洛谷P1850 [noip2016]换教室——期望DP的更多相关文章

  1. 洛谷1850(NOIp2016) 换教室——期望dp

    题目:https://www.luogu.org/problemnew/show/P1850 状态里记录的是”上一回有没有申请“,而不是”上一回申请成功否“,不然“申请 j 次”就没法转移了. dou ...

  2. 【洛谷P1850】换教室[2016NOIP提高组]

    换教室 期望DP 状态: f[i][j][0/1]表示前i节课 提交j个申请 第i个教室不申请/申请(为了确定当前教室,方便转移) 的最小期望 方程: f[i][j][0]=min(f[i-1][j] ...

  3. bzoj4720: [Noip2016]换教室(期望dp)

    4720: [Noip2016]换教室 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1294  Solved: 698[Submit][Status ...

  4. 【bzoj4720】[NOIP2016]换教室 期望dp

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...

  5. 【bzoj4720】[Noip2016]换教室 期望dp+最短路

    Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...

  6. JZYZOJ1457 [NOIP2016]换教室 期望dp 动态规划 floyd算法 最短路

    http://172.20.6.3/Problem_Show.asp?id=1457 我不知道为什么我倒着推期望只有80分,所以我妥协了,我对着题解写了个正的,我有罪. #include<cst ...

  7. [NOIP2016]换教室 期望dp

    先弗洛伊德,然后把状态拆分遗传 #include<iostream> #include<cstdio> #include<cstring> #include< ...

  8. 换教室(期望+DP)

    换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...

  9. Luogu P1850 [NOIp2016提高组]换教室 | 期望dp

    题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...

随机推荐

  1. ecshop 修改支持php7 方案

    修改方法 http://jsb.php-php.com/2016/05/472/ 修改数据库配置 data/config.php

  2. web 学习

    重要得之前的知识浏览器 shell 内核外表 内心 IE tridentFirefox Geckogoogle chrome webkit/blinksafari webkitopera presto ...

  3. 杭电 2803 The MAX(sort)

    Description Giving N integers, V1, V2,,,,Vn, you should find the biggest value of F.  Input Each tes ...

  4. HDU 3157 Crazy Circuits

    Crazy Circuits Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...

  5. 九度oj 题目1070:今年的第几天?

    题目1070:今年的第几天? 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6832 解决:3779 题目描述: 输入年.月.日,计算该天是本年的第几天. 输入: 包括三个整数年(1< ...

  6. WebLoad 解析服务器返回的XML格式内容

    Parsing the XML Response get the root node:  var rootNode = document.wlXmls[0].XMLDocument.documentE ...

  7. hdu 3657 最小割(牛逼!!!!)总算理解了

    <strong></strong> 转载:http://blog.csdn.net/me4546/article/details/6662959 加颜色的太棒了!!! 在网上看 ...

  8. node.js里的buffer常见操作,copy,concat等实例讲解

    //通过长度构建的buffer内容是随机的 var buffer=new Buffer(100); console.log(buffer); //手动清空buffer,一般创建buffer不会清空 b ...

  9. 【Tomcat】Tomcat性能分析

    一.预研任务介绍和预研目标 任务介绍: Apache Tomcat是目前较为流行的web服务器,以其技术先进.性能稳定著称,其次它还是一个免费开源的项目. Tomcat性能分析的意义在于能为日常工作中 ...

  10. ssh远程登录

    ssh root@192.168.124.128 密钥登录: 1).ssh-keygen 生成公钥和私钥 [root@rhel5 ~]# ssh-keygen -t rsa Generating pu ...