【BZOJ2037】[Sdoi2008]Sue的小球 区间DP+费用提前
【BZOJ2037】[Sdoi2008]Sue的小球
Description
Input
Output
Sample Input
-4 -2 2
22 30 26
1 9 8
Sample Output
数据范围:
N < = 1000,对于100%的数据。 -10^4 < = xi,yi,vi < = 10^4
题解:费用提前计算的题也不是做过一道两道了。。。然而这题还是没反应过来。
用f[i][j]表示已经取完了i和j中间的所有彩蛋,且最后在j的最高分数。由于DP值与时间有关,所以我们要提前计算我们损失的分数。当我们从f[i][j]转移到其他状态时,所有我们还没去过的彩蛋的分数都会降低,所以我们令DP值减去那些彩蛋的v之和*时间即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int n,m;
ll ans;
struct node
{
ll x,y,v;
}p[1010];
ll s[1010],f[1010][1010];
inline int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+(gc^'0'),gc=getchar();
return ret*f;
}
bool cmp(const node &a,const node &b)
{
return a.x<b.x;
}
inline ll cost(int a,int b,int c)
{
return abs(p[c].x-p[b].x)*(s[n]-s[max(a,b)]+s[min(a,b)-1]);
}
int main()
{
n=rd()+1,p[n].x=rd(),p[n].y=100000;
int i,j;
for(i=1;i<n;i++) p[i].x=rd();
for(i=1;i<n;i++) p[i].y=rd();
for(i=1;i<n;i++) p[i].v=rd();
sort(p+1,p+n+1,cmp);
for(i=1;i<=n;i++)
{
if(p[i].y==100000) f[i][i]=0,m=i;
else f[i][i]=-1ll<<60;
}
for(i=1;i<=n;i++) s[i]=s[i-1]+p[i].v;
for(j=1;j<=n;j++)
{
for(i=1;i+j<=n;i++)
{
f[i][i+j]=max(f[i][i+j-1]-cost(i,i+j-1,i+j),f[i+j-1][i]-cost(i+j-1,i,i+j))+p[i+j].y;
f[i+j][i]=max(f[i+1][i+j]-cost(i+1,i+j,i),f[i+j][i+1]-cost(i+j,i+1,i))+p[i].y;
}
}
ans=max(f[1][n],f[n][1]);
if(ans<0) ans=-ans,printf("-");
printf("%lld.%03lld",ans/1000,ans%1000);
return 0;
}
【BZOJ2037】[Sdoi2008]Sue的小球 区间DP+费用提前的更多相关文章
- BZOJ2037: [Sdoi2008]Sue的小球(区间DP)
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 869 Solved: 483[Submit][Status][Discuss] Description ...
- [luogu2446][bzoj2037][SDOI2008]Sue的小球【区间DP】
分析 简单区间DP, 定义状态f[i][j][0/1]为取完i-j的小球最后取i/j上的小球所能获得的最大价值. 排序转移. ac代码 #include <bits/stdc++.h> # ...
- BZOJ2037: [Sdoi2008]Sue的小球
Description Sue 和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海 盗,而是要收集空中漂浮 ...
- BZOJ-2037 Sue的小球 DP+费用提前
似乎很早时学长考过很类似的? 2037: [Sdoi2008]Sue的小球 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 558 Solved: 300 ...
- 2037: [Sdoi2008]Sue的小球
2037: [Sdoi2008]Sue的小球 链接 题解 论文 代码 #include<cstdio> #include<algorithm> #include<cstr ...
- 【BZOJ2037】Sue的小球(动态规划)
[BZOJ2037]Sue的小球(动态规划) 题面 BZOJ 题解 莫名想到这道题目 很明显是一样的 设\(f[i][j][0/1]\)表示已经接到了\(i-j\)这一段的小球 当前在\(i\)或者在 ...
- [SDOI2008]Sue的小球
题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一 ...
- Luogu[SDOI2008]Sue的小球
题目描述 Sue和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海盗,而是要收集空中漂浮的彩蛋,Sue有一 ...
- 【简●解】[SDOI2008] Sue的小球
[简●解][SDOI2008] Sue的小球 计划着刷\(DP\)题结果碰到了这样一道论文题,幸好不是太难. [题目大意] 口水话有点多,所以就直接放链接.传送门 [分析] 看到题首先联想到了曾经做过 ...
随机推荐
- C语言实现http get请求程序
1.客户端程序: 向指定URL发送http请求, http://files.cnblogs.com/files/yyx1-1/httpclient01.7z 源码程序 2.服务器程序: 接收URL请求 ...
- django abstract base class ---- 抽象基类
抽象蕨类用于定义一些同享的列.类本身并不会在数据库端有表与之对应 一.例子: 1.定义一个叫Person 的抽象基类.Student 继承自Person from django.db import m ...
- vue 发送ajax请求
一. 简介 1.vue本身不支持发送AJAX请求,需要使用vue-resource(vue1.0版本).axios(vue2.0版本)等插件实现 2.axios是一个基于Promise的HTTP请求客 ...
- RabbitMQ php 使用
RabbitMQ是一个开源的基于AMQP(Advanced Message Queuing Protocol)标准,并且可靠性高的企业级消息系统,目前很多网站在用,包括reddit,Poppen.de ...
- c++,当const char*为0时,不能将其直接赋给string
下面程序会崩溃: const char* t_objName = (obj!=NULL)?obj->getName(): 0; string objName=t_objName; cout< ...
- docker1.12安装配置及使用笔记
官方安装手册地址:https://docs.docker.com/engine/installation/linux/ubuntulinux/ 使用的操作系统是是ubuntu14.04,按照官方的推荐 ...
- ubuntu apt-get方式安装与卸载
在ubuntu终端中安装软件: 安装软件 apt-get install softname1 softname2 softname3……卸载软件 apt-get remove softname1 so ...
- 多国语言解决方案gnu.gettext + poedit
1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Locali ...
- [POJ 1236][IOI 1996]Network of Schools
Description A number of schools are connected to a computer network. Agreements have been developed ...
- python pip的安装流程,以及使用pip更新,卸载第三方模块
在Python的学习过程中,肯定会遇到很多安装模块的地方,可以使用easy_install安装,但是easy_install相对于pip而言,最大的缺陷就是它所安装的模块是不能够卸载的,其他功能是和p ...