洛谷P1850 [noip2016]换教室——期望DP
题目: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的更多相关文章
- 洛谷1850(NOIp2016) 换教室——期望dp
题目:https://www.luogu.org/problemnew/show/P1850 状态里记录的是”上一回有没有申请“,而不是”上一回申请成功否“,不然“申请 j 次”就没法转移了. dou ...
- 【洛谷P1850】换教室[2016NOIP提高组]
换教室 期望DP 状态: f[i][j][0/1]表示前i节课 提交j个申请 第i个教室不申请/申请(为了确定当前教室,方便转移) 的最小期望 方程: f[i][j][0]=min(f[i-1][j] ...
- bzoj4720: [Noip2016]换教室(期望dp)
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1294 Solved: 698[Submit][Status ...
- 【bzoj4720】[NOIP2016]换教室 期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- 【bzoj4720】[Noip2016]换教室 期望dp+最短路
Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...
- JZYZOJ1457 [NOIP2016]换教室 期望dp 动态规划 floyd算法 最短路
http://172.20.6.3/Problem_Show.asp?id=1457 我不知道为什么我倒着推期望只有80分,所以我妥协了,我对着题解写了个正的,我有罪. #include<cst ...
- [NOIP2016]换教室 期望dp
先弗洛伊德,然后把状态拆分遗传 #include<iostream> #include<cstdio> #include<cstring> #include< ...
- 换教室(期望+DP)
换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...
- Luogu P1850 [NOIp2016提高组]换教室 | 期望dp
题目链接 思路: <1>概率与期望期望=情况①的值*情况①的概率+情况②的值*情况②的概率+--+情况n的值*情况n的概率举个例子,抛一个骰子,每一面朝上的概率都是1/6,则这一个骰子落地 ...
随机推荐
- js 小练习
js 学习之路代码记录 js 加载时间线 1.创建Document对象,开始解析web页面.解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中.这个阶段document.r ...
- python while、continue、break
while循环实现用户登录 _user = "tom" _passwd = "abc123" counter = 0 while counter < 3: ...
- Spider-Python爬虫之使用Selenium模拟浏览器行为
分析 他的代码比较简单,主要有以下的步骤:使用BeautifulSoup库,打开百度贴吧的首页地址,再解析得到id为new_list标签底下的img标签,最后将img标签的图片保存下来. header ...
- C语言学习4
C/C++语言五大内存分区:堆.栈.自由存储区.全局/静态存储区和常量存储区 栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的存储区,里面的变量通常是全局变量.函数参数等. 堆:就是那些 ...
- 关于Google浏览器Unable to preventDefault inside passive event listener due to target being treated as passive.的解决方案
最近写react项目的时候,引用了antd-mobile,在使用滚动组件的时候,发现谷歌浏览器会报以下警告 最初我以为是antd-mobile的问题导致的,然后我就无查看了之前的vue的项目,发现了类 ...
- <struct、union、enum>差异
关于C++和C的区别 区别最大的是struct,C++中的struct几乎和class一样了,可以有成员函数,而C中的struct只能包含成员变量. enum,union没区别. struct的定义 ...
- 集训第五周 动态规划 B题LIS
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- java ssm框架 mapper文件里的#符号和$符号的区别
Java SSM框架里面,Mapper.xml文件 (一)#符号生成的sql语句是作为传参的 <!-- 获得数据列表(包括课程相关信息) --> <select id="G ...
- hihoCoder#1036 Trie图
原题地址 看了这篇博文,总算是把Trie图弄明白了 Runtime Error了无数次,一直不知道为什么,于是写了个脚本生成了一组大数据,发现果然段错误了. 调试了一下午,总算闹明白了,为什么呢? 1 ...
- gulp基本语法
pipe:用管道输送 1.gulp.src(glops[, options]) 输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件. 将返回一个 ...