BZOJ 2037 区间DP
跟POJ 3042是一个类型的http://blog.csdn.net/qq_31785871/article/details/52954924
思路:
先排个序 (把初始位置也插进去)
f[i][j]表示从第i个到第j个之间的蛋都被收完了
f[i][j][0]表示在地点i f[i][j][1]表示在地点j
维护一个sumv数组 是v的前缀和
f[i][j][0]=max(f[i+1][j][0]-(node[i+1].x-node[i].x)*(sumv[n]-sumv[j]+sumv[i]),
f[i+1][j][1]-(node[j].x-node[i].x)*(sumv[n]-sumv[j]+sumv[i])),
f[i][j][1]=max(f[i][j-1][0]-(node[j].x-node[i].x)*(sumv[n]-sumv[j-1]+sumv[i-1]),
f[i][j-1][1]-(node[j].x-node[j-1].x)*(sumv[n]-sumv[j-1]+sumv[i-1]));
最后加上所有的y之和就好啦
注意把数组付上初值!!@某人
//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,x0,sumy,sumv[1005],f[1005][1005][2];
struct Node{int x,y,v;}node[1005];
bool cmp(Node a,Node b){return a.x<b.x;}
int main(){
scanf("%d%d",&n,&x0);
for(int i=1;i<=n;i++)scanf("%d",&node[i].x);
for(int i=1;i<=n;i++)scanf("%d",&node[i].y),sumy+=node[i].y;
for(int i=1;i<=n;i++)scanf("%d",&node[i].v);
node[++n].x=x0;
sort(node+1,node+1+n,cmp);
for(int i=1;i<=n;i++){
if(node[i].x!=x0)f[i][i][0]=f[i][i][1]=0xcfffffff;
sumv[i]=sumv[i-1]+node[i].v;
}
for(int i=n;i;i--)
for(int j=i+1;j<=n;j++)
f[i][j][0]=max(f[i+1][j][0]-(node[i+1].x-node[i].x)*(sumv[n]-sumv[j]+sumv[i]),
f[i+1][j][1]-(node[j].x-node[i].x)*(sumv[n]-sumv[j]+sumv[i])),
f[i][j][1]=max(f[i][j-1][0]-(node[j].x-node[i].x)*(sumv[n]-sumv[j-1]+sumv[i-1]),
f[i][j-1][1]-(node[j].x-node[j-1].x)*(sumv[n]-sumv[j-1]+sumv[i-1]));
printf("%.3lf\n",0.001*(max(f[1][n][0],f[1][n][1])+sumy));
}
BZOJ 2037 区间DP的更多相关文章
- BZOJ 1068 (区间DP)
题意:字符串的压缩,f[l][r][0]代表还没M,f[l][r][1]代表有M. #include<cstdio> #include<cmath> #include<c ...
- bzoj 1261 区间DP
首先我们知道ans=Σ(h[i]*f[i])=Σ(h[i]*d[i])/s=Σ(k(r[i]+1)+c)*d[i]/s=Σ(k*r[i]+(k+c))*d[i]/s 我们可以发现,除了k*r[i]之外 ...
- BZOJ 1055 区间DP
1055: [HAOI2008]玩具取名 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1144 Solved: 668[Submit][Statu ...
- BZOJ 1260 - 区间dp
Magic Door 题目大意: 给一个字符串,问需要至少覆盖多少次. 题目分析 区间dp: dp[i][j]表示达到i~j这个状态的最少覆盖次数,分两种情况: s[i] == s[j]: 此时内层可 ...
- BZOJ 1090 - 区间dp
Magic Door 题目大意: 给一个字符串,可以将重复的串缩成x(a),表示x个a,求能缩成的最小长度. 题目分析 区间dp: dp[i][j]表示i~j处理后的最小长度, 则有 \[dp[i][ ...
- bzoj 1996 区间dp
1996: [Hnoi2010]chorus 合唱队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1727 Solved: 1115[Submit][ ...
- [CQOI2007]涂色 BZOJ 1260 区间dp
题目描述 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个 ...
- BZOJ.4897.[Thu Summer Camp2016]成绩单(区间DP)
BZOJ 显然是个区间DP.令\(f[l][r]\)表示全部消掉区间\([l,r]\)的最小花费. 因为是可以通过删掉若干子串来删子序列的,所以并不好直接转移.而花费只与最大最小值有关,所以再令\(g ...
- [BZOJ 1652][USACO 06FEB]Treats for the Cows 题解(区间DP)
[BZOJ 1652][USACO 06FEB]Treats for the Cows Description FJ has purchased N (1 <= N <= 2000) yu ...
随机推荐
- 初学者指南:ZFS 是什么,为什么要使用 ZFS?
作者: John Paul 译者: LCTT Lv Feng 今天,我们来谈论一下 ZFS,一个先进的文件系统.我们将讨论 ZFS 从何而来,它是什么,以及为什么它在科技界和企业界如此受欢迎. 虽然我 ...
- XAMPP添加多个站点之httpd-vhosts.conf 设置
1.在xampp\apache\conf\httpd.conf设置路径DocumentRoot和Directory 必须与xampp\apache\conf\extra\httpd-vhosts.co ...
- 【noip2016】蚯蚓(单调性+队列)
题目贼长 大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q&l ...
- php 安装rabtmq amqp 扩展
php 安装 rabbitmq-c-0.9.0 扩展 安装 ibrabbitmq-c github 仓库地址https://github.com/alanxz/rab... ``` 安装过程如果报错 ...
- 一个HelloWorld版的MySQL数据库管理器的设计与实现(源码)
2011年,实习期间写了一个简单的数据库管理器. 今天,特意整理了下,分享给大家. 有兴趣的同学,可以下载源码,瞧瞧. 源码只有4个类:LoginGUI,DatabaseGUI,Record,MySQ ...
- Unity 编辑器学习(二)之 全局光照(GI)
光影流年,花影阡陌.光与影交织的岁月教育我们,不会使用光照的程序员不是个好美术. 一.概述 点击 Window > Lighting > Settings 会弹出Lighting窗口,这个 ...
- 题解 CF911D 【Inversion Counting】
这是一道看似复杂其实也不简单的思维题. 其实思路很明显. 因为这道题的数据范围比较大,有1e5的询问,如果暴力(像我考场上那样打平衡树)的话可以做到$mnlogn$. 但那样也是稳T. 经过思考之后我 ...
- 【Henu ACM Round#19 F】Dispute
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 这一题和这一题很像 (链接 ) 会发现如果a[i]!=b[i]那么就按下i就好了. 然后改变和他相邻的点. 此后a[i]再也不可能和 ...
- 【Codeforces Round #422 (Div. 2) A】I'm bored with life
[题目链接]:http://codeforces.com/contest/822/problem/A [题意] 让你求a!和b!的gcd min(a,b)<=12 [题解] 哪个小就输出那个数的 ...
- Spring Cloud学习笔记【九】配置中心Spring Cloud Config
Spring Cloud Config 是 Spring Cloud 团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端 ...