洛谷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,则这一个骰子落地 ...
随机推荐
- ZOJ 2567 Trade
Trade Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original ID: 2567 ...
- [luoguP1022] 计算器的改良(模拟)
传送门 超级大模拟.. 代码 #include <cstdio> #include <cstring> #include <iostream> #define is ...
- [BZOJ3555] [Ctsc2014]企鹅QQ(Hash)
传送门 可以枚举被删除的位置,然后用hash表判重,然而网上好多题解都是用 sort 判重的. 不知道为什么,int 总是过不了,换成 long long 或者是 unsigned long long ...
- hdu 4430 二分+枚举
/* 二分+枚举 枚举k会超时,枚举r还要优化,有可能会超64 */ #include<stdio.h> #include<math.h> #define ll __int64 ...
- Spring Boot Jpa 表名小写转大写
今天在使用SpringBoot整合Hibernate后创建表,表名为小写,而在linux下,mysql的表名是区分大小写的,因此在我的数据表中,就出现了两个一样的表 act_id_user 和 AC ...
- CentOS 7防火墙服务FirewallD指南
CentOS 7防火墙服务FirewallD指南 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 防火墙是一种位于内部网 ...
- 条款八: 写operator new和operator delete时要遵循常规
自己重写operator new时(条款10解释了为什么有时要重写它),很重要的一点是函数提供的行为要和系统缺省的operator new一致.实际做起来也就是:要有正确的返回值:可用内存不够时要调用 ...
- 1072. Gas Station (30)【最短路dijkstra】——PAT (Advanced Level) Practise
题目信息 1072. Gas Station (30) 时间限制200 ms 内存限制65536 kB 代码长度限制16000 B A gas station has to be built at s ...
- android的ListView点击item使item展开的做法
直接上代码把.主要是又一次给item measure高度,直接上代码把 import java.util.ArrayList; import android.app.Activity; import ...
- CodeForces484A Bits(贪心)
CodeForces484A Bits(贪心) CodeForces484A 题目大意:给出范围[A.B].期望你给出某个数X满足X属于[A,B],而且X转成二进制的1的个数最多.假设有多个给出最小的 ...