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\)题结果碰到了这样一道论文题,幸好不是太难. [题目大意] 口水话有点多,所以就直接放链接.传送门 [分析] 看到题首先联想到了曾经做过 ...
随机推荐
- 笔记本_thinkpad_e40
1. 0578A69 2.驱动下载 相关地址 XPhttp://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1253259153348 ...
- [转载] 每个 Python 程序员都要知道的日志实践
原文: http://python.jobbole.com/81666/ 在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果 ...
- 06 SQL执行计划
解释计划 与 执行计划的 区别 随着可以得到解释计划输出的开发工具, 比如 toad 的普遍使用, 生成解释计划就变的相当简单. 而不简单的是得到执行计划. 解释计划 EXPLAIN PLAN 用来显 ...
- 线程高级应用-心得6-java5线程并发库中同步工具类(synchronizers),新知识大用途
1.新知识普及 2. Semaphore工具类的使用案例 package com.java5.thread.newSkill; import java.util.concurrent.Executor ...
- Bootstrap的粗体和斜体
一.粗体 粗体就是给文本加粗,在普通的元素中我们一般通过font-weight设置为bold关键词给文本加粗. 在Bootstrap中,可以使用<b>和<strong>标签让文 ...
- CSS3_边框属性之圆角的基本图形案例
一.正方形 div{ background:#F00; width:100px; height:100px;} 二.长方形 div{background:#F00;width:200px;heig ...
- haskell rust相关文章
Combining Rust and Haskell http://tab.snarc.org/posts/haskell/2015-09-29-rust-with-haskell.html
- eclipse+adt+sdk开发环境搭配
1.开发环境配置 http://www.mamicode.com/info-detail-516839.html
- java里的基本数据类型
java里一共有八大数据类型 boolean(未定) char(2字节) byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节), ...
- 清理PC垃圾
@echo off pause echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive ...