【bzoj4720】[NOIP2016]换教室
题目描述
输入
输出
样例输入
3 2 3 3
2 1 2
1 2 1
0.8 0.2 0.5
1 2 5
1 3 3
2 3 1
样例输出
2.80
题解
不是很难想的floyd+期望dp
f[i][j]表示前i门课程用j次机会,且第i门课程不申请换教室的最小期望,
g[i][j]表示前i门课程用j次机会,且第i门课程申请换教室的最小期望。
先用floyd求出任意两点的距离,
然后就是推来推去,不难推。
但最坑的就是:
这尼玛有重边。。。尼玛有重边。。。玛有重边。。。有重边。。。重边。。。边。。。
(题目也没说没有重边呀。。。)
注意处理。
还有memset不能用于double数组,不然会炸得很惨。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int c[2001] , d[2001] , map[301][301];
double p[2001] , f[2001][2001] , g[2001][2001];
int main()
{
int n , m , v , e , i , j , k , x , y , z;
double ans = 1000000000;
scanf("%d%d%d%d" , &n , &m , &v , &e);
for(i = 1 ; i <= n ; i ++ )
scanf("%d" , &c[i]);
for(i = 1 ; i <= n ; i ++ )
scanf("%d" , &d[i]);
for(i = 1 ; i <= n ; i ++ )
scanf("%lf" , &p[i]);
for(i = 1 ; i <= v ; i ++ )
{
for(j = 1 ; j <= v ; j ++ )
map[i][j] = 1000000000;
map[i][i] = 0;
}
for(i = 1 ; i <= e ; i ++ )
{
scanf("%d%d%d" , &x , &y , &z);
map[x][y] = map[y][x] = min(map[x][y] , z);
}
for(k = 1 ; k <= v ; k ++ )
for(i = 1 ; i <= v ; i ++ )
for(j = 1 ; j <= v ; j ++ )
if(map[i][j] > map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
for(i = 1 ; i <= n ; i ++ )
for(j = 0 ; j <= m ; j ++ )
f[i][j] = g[i][j] = 1000000000;
f[1][0] = g[1][1] = 0;
for(i = 2 ; i <= n ; i ++ )
{
f[i][0] = f[i - 1][0] + map[c[i - 1]][c[i]];
for(j = 1 ; j <= m ; j ++ )
{
f[i][j] = min(f[i - 1][j] + map[c[i - 1]][c[i]] ,
g[i - 1][j] + map[c[i - 1]][c[i]] * (1 - p[i - 1])
+ map[d[i - 1]][c[i]] * p[i - 1]);
g[i][j] = min(f[i - 1][j - 1] + map[c[i - 1]][c[i]] * (1 - p[i])
+ map[c[i - 1]][d[i]] * p[i] ,
g[i - 1][j - 1] + map[c[i - 1]][c[i]] * (1 - p[i - 1]) * (1 - p[i])
+ map[d[i - 1]][c[i]] * p[i - 1] * (1 - p[i])
+ map[c[i - 1]][d[i]] * (1 - p[i - 1]) * p[i]
+ map[d[i - 1]][d[i]] * p[i - 1] * p[i]);
}
}
for(i = 0 ; i <= m ; i ++ )
ans = min(ans , min(f[n][i] , g[n][i]));
printf("%.2lf\n" , ans);
return 0;
}
【bzoj4720】[NOIP2016]换教室的更多相关文章
- bzoj4720: [Noip2016]换教室(期望dp)
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1294 Solved: 698[Submit][Status ...
- BZOJ4720 [Noip2016]换教室
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 2018.08.30 bzoj4720: [Noip2016]换教室(期望dp)
传送门 一道无脑的期望dp. 用f[i][j][0/1]表示前i堂课提出了j次申请且第i堂课没有(有)提出申请. 这样就可以状态转移了. 然而这题状态转移方程有点长... (主要是情况多... 代码: ...
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- BZOJ 4720 [Noip2016]换教室
4720: [Noip2016]换教室 Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i( ...
- 【BZOJ】4720: [Noip2016]换教室
4720: [Noip2016]换教室 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1690 Solved: 979[Submit][Status ...
- [NOIP2016]换教室 题解(奇怪的三种状态)
2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1< ...
- 【bzoj4720】[NOIP2016]换教室 期望dp
题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的课程同时在不同的 ...
- [NOIp2016] 换教室
题目类型:期望\(DP\) 传送门:>Here< 题意:现有\(N\)个时间段,每个时间段上一节课.如果不申请换教室,那么时间段\(i\)必须去教室\(c[i]\)上课,如果申请换课成功, ...
随机推荐
- POJ2195 Going Home[费用流|二分图最大权匹配]
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22088 Accepted: 11155 Desc ...
- intel和AMD CPU性能对比(2016年CPU天梯图)组装电脑必读!
http://www.365pcbuy.com/article-411.html 特别提示:此文已经于2016年10月12日更新!内容变动较大,请细细品鉴! 如何为客户推荐高性价比机型是我站的重要工作 ...
- TestFlight
链接: 如何使用TestFlight进行Beta测试 [转]TestFlight APP测试(IOS如何让上架前给其他人测试) 转]TestFlight APP测试(IOS如何让上架前给其他人测试) ...
- time.c 的Java实现(从timestamp计算年月日时分秒等数值)
time.c的Java实现 public class GMT { public static final int EPOCH_YEAR = 1970; public static final int[ ...
- Path Sum II
Path Sum II Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals ...
- ASP.NET MVC载入页面常用方法
@RenderBody 在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中.在这个页面中,会看到标签里有这样一条语句: @Rend ...
- 2.1 python使用MongoDB 示例代码
import pymongo client = pymongo.MongoClient('localhost', 27017) # MongoDB 客户端 walden = client['walde ...
- Ubuntu 16.04 LTS设置国内更新源
ubuntu一般多用于开发环境,centos/redhat多用于企业环境.suse多用于银行金融行业!!! 01.ubuntu源地址 /etc/apt/sources.list 02.更新缓存资源索引 ...
- 图片加载框架Fresco与V4包冲突解决方法
- iis虚拟目录名称“ReportServer”的巧合
今天测试一个Crystal Report网站的报表服务,建立一个虚拟目录,名为ReportServer,结果无论怎样访问浏览器都返回 localhost/ReportServer - / Micr ...