bzoj 2037: [Sdoi2008]Sue的小球
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct data
{
int x,y,v;
}a[];
int f[][][],n,x0,b[],sum[],tot;
bool cmp(data a1,data a2)
{
return a1.x<a2.x;
}
int main()
{
scanf("%d%d",&n,&x0);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i].x);
a[i].x-=x0;
}
for(int i=;i<=n;i++)
{
scanf("%d",&a[i].y);
tot+=a[i].y;
}
for(int i=;i<=n;i++)
scanf("%d",&a[i].v);
sort(a,a+n+,cmp);
for(int i=;i<=n;i++)
b[i]=a[i].x;
x0=lower_bound(b,b+n+,)-b;
for(int i=x0-;i>=;i--)
sum[i]=sum[i+]+a[i].v;
for(int i=x0+;i<=n;i++)
sum[i]=sum[i-]+a[i].v;
for(int i=x0+;i<=n;i++)
{
f[x0][i][]=f[x0][i-][]+(sum[n]+sum[]-sum[i-])*abs(a[i].x-a[i-].x);
f[x0][i][]=f[x0][i][]+(sum[n]+sum[]-sum[i])*abs(a[i].x);
}
for(int i=x0-;i>=;i--)
{
f[i][x0][]=f[i+][x0][]+(sum[n]+sum[]-sum[i+])*abs(a[i].x-a[i+].x);
f[i][x0][]=f[i][x0][]+(sum[n]+sum[]-sum[i])*abs(a[i].x);
}
for(int i=x0-;i>=;i--)
for(int j=x0+;j<=n;j++)
{
f[i][j][]=f[i+][j][]+(sum[]-sum[i+]+sum[n]-sum[j])*abs(a[i].x-a[i+].x);
f[i][j][]=min(f[i][j][],f[i+][j][]+(sum[]-sum[i+]+sum[n]-sum[j])*abs(a[i].x-a[j].x));
f[i][j][]=f[i][j-][]+(sum[]-sum[i]+sum[n]-sum[j-])*abs(a[j].x-a[j-].x);
f[i][j][]=min(f[i][j][],f[i][j-][]+(sum[]-sum[i]+sum[n]-sum[j-])*abs(a[j].x-a[i].x));
}
int x0=min(f[][n][],f[][n][]);
printf("%.3lf\n",(tot-x0)*0.001);
return ;
}
很像以前在codevs上做的关路灯那个题,区间型DP,可知他不可能越过一盏灯去关另一盏。所以从起点开始,依次向两边扩展,f[i][j][0]表示关完区间[i,j]停在左边,[1]表示停在右边。
f[i][j][0]即可从f[i+1][j][0]转移来,又可从f[i+1][j][1]转移来。
bzoj 2037: [Sdoi2008]Sue的小球的更多相关文章
- bzoj 2037: [Sdoi2008]Sue的小球——dp
Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩 ...
- 2037: [Sdoi2008]Sue的小球
2037: [Sdoi2008]Sue的小球 链接 题解 论文 代码 #include<cstdio> #include<algorithm> #include<cstr ...
- 【BZOJ2037】[Sdoi2008]Sue的小球 区间DP+费用提前
[BZOJ2037][Sdoi2008]Sue的小球 Description Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而 ...
- BZOJ2037: [Sdoi2008]Sue的小球
Description Sue 和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海 盗,而是要收集空中漂浮 ...
- [SDOI2008]Sue的小球
题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一 ...
- [luogu2446][bzoj2037][SDOI2008]Sue的小球【区间DP】
分析 简单区间DP, 定义状态f[i][j][0/1]为取完i-j的小球最后取i/j上的小球所能获得的最大价值. 排序转移. ac代码 #include <bits/stdc++.h> # ...
- BZOJ2037: [Sdoi2008]Sue的小球(区间DP)
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 869 Solved: 483[Submit][Status][Discuss] Description ...
- Luogu[SDOI2008]Sue的小球
题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一 ...
- 【简●解】[SDOI2008] Sue的小球
[简●解][SDOI2008] Sue的小球 计划着刷\(DP\)题结果碰到了这样一道论文题,幸好不是太难. [题目大意] 口水话有点多,所以就直接放链接.传送门 [分析] 看到题首先联想到了曾经做过 ...
随机推荐
- sscanf的用法(转)
队长做上海邀请赛的I题时遇到一个棘手的问题,字符串的处理很麻烦,按传统的gets全部读入的话还要做N多处理,太浪费时间. 回来之后搜了一下sscanf的用法发现可以很好的解决这一类问题,各种百度,转来 ...
- js-------》(小效果)实现倒计时及时间对象
js实现倒计时及时间对象 JS实现倒计时效果代码如下: 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset ...
- oracle 生成随机数【待整理】
http://www.cnblogs.com/ulex/p/4415478.html http://blog.sina.com.cn/s/blog_6a01140c0100wimi.html
- jackson annotations注解详解 (zhuan)
http://blog.csdn.net/sdyy321/article/details/40298081 ************************************** 官方WIKI: ...
- 车辆管理系统之搭建框架 添加必要的数据 安装svn(二)
JAVA EE第一阶段项目——车辆管理系统.MyEclipse + MySQL +powerDesinger +tomcat +svn. 今天组长把项目的分工安排好了!这个周末两天的作业就是我的车主信 ...
- Html_页面的高度宽度等
offsetTop 指元素距离上方或上层控件的位置,整型,单位像素. offsetLeft 指元素距离左方或上层控件的位置,整型,单位像素. offsetWidth 指元素控件自身的宽度,整型,单位像 ...
- NumPy(Numeric Python)使用方法
NumPy官网 参考:<Python数据分析基础教程:NumPy学习指南> 用Python做科学计算(好东西) NumPy是python的核心库,是python机器学习编程的最底层的库,不 ...
- XML Attributes(XML属性)
XML Attributes(XML属性) android:autoLink 是否自动链接网址或邮箱地址: android:autoText 自动检测错误: android:bufferType ...
- 联想手机#P1来了#P1背后的故事系列
http://bbs.lenovo.com/forum.php?mod=viewthread&fid=928&tid=560992&extra=page%3D1 联想手机#P1 ...
- servlet的配置和上下文
一.Servlet配置对象(ServletConfig):Servlet初始化时,容器调用其init(ServletConfig)方法,传递该对象. 1.获得对象方法: (1).直接使用getServ ...