博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4412 Sky Soldiers(区间DP)
阅读量:4128 次
发布时间:2019-05-25

本文共 1679 字,大约阅读时间需要 5 分钟。

题目问题抽象之后为:在一个x坐标轴上有N个点,每个点上有一个概率值,可以修M个工作站,

                     求怎样安排这M个工作站的位置,使得这N个点都走到工作站的距离期望值最小?

解题报告人:SpringWater(GHQ)

解题思路:状态方程:dp[i][j]  =  min{ dp[i - 1][k - 1]  + cost[k][j]   }dp[i][j]表示在1到j修i个站,的最小期望值,

                   cost【k】【j】是我预处理的k到j这段区间修一个工作站的期望值 ,因为在求cost【k】【j】具

                有单调性,所以可以在O(n^2)复杂度算出

代码如下:

#include
#include
#include
#include
#include
#include
#define MAXN 1005using namespace std;double dp[55][MAXN], cost[MAXN][MAXN];map
hash;struct Info{double pos;double p;}info[MAXN];int main(){ int N, M, i, n, a, j, k, pos; double l, r, suml, sumr; double b, min, temp, t; while(scanf("%d%d",&N, &M)&&(N + M)) { hash.clear(); for( i = 1; i <= N; ++ i ) { scanf("%d", &n);++n; while(--n) { scanf("%d%lf", &a, &b); hash[a]+=b; } } N = 0; for(map
::iterator it = hash.begin(); it != hash.end(); ++it) { info[++N].pos = it->first; info[N].p = it->second; } for(j = N; j >= 1; j--) { pos = j; cost[j][j] = 0; l = r = suml = 0; sumr = info[j].p; for(k = j-1; k >= 1; --k ) { suml += info[k].p; l += (info[pos].pos-info[k].pos) * info[k].p; temp = l + r; while((pos > 1)&&(temp>(t = (l + r + (sumr - suml) * (info[pos].pos - info[pos - 1].pos))))) { l -= suml * (info[pos].pos - info[pos - 1].pos); r += sumr * (info[pos].pos - info[pos - 1].pos); --pos; suml -= info[pos].p; sumr +=info[pos].p; temp = t; } cost[k][j] = temp; } } for(i = 1; i <= N; i++)dp[0][i] = 1e300; for(i = 0; i <= M; i++)dp[i][0] = 0; for(i = 1; i <= M; i++) { for(j = N; j >= 1; j--) { min = dp[i-1][j-1] + cost[j][j]; for(k = j-1; k >= 1; --k ) { if(dp[i - 1][k - 1] + cost[k][j] < min)min = dp[i - 1][k - 1] + cost[k][j]; } dp[i][j] = min; } } printf("%0.2lf\n",dp[M][N]); } return 0;}

转载地址:http://keuvi.baihongyu.com/

你可能感兴趣的文章
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
异常 Java学习Day_15
查看>>
Mysql初始化的命令
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>