1761: [Baltic2009]beetle

Time Limit: 4 Sec  Memory Limit: 64 MB
Submit: 255  Solved: 92
[Submit][Status][Discuss]

Description

在一条直线上有N个点,每个点M升水.
一个虫子在坐标轴0点上,它每个单位时间移动一格,每个点的水每单位时间消失1升.
问虫子最多可以喝到多少水,喝水的时间忽略不计

Input

第一行给出数字N,M
下面N行给出N个点的坐标Xi
0 ≤ n ≤ 300, 1 ≤ m ≤ 1,000,000, −10,000 ≤ x1, x2, . . . , xn ≤ 10,000,

Output

最多可以喝到多少水

Sample Input

3 15
6
-3
1

Sample Output

25

HINT

虫子开始在0点,它先到1这个点喝水,再到-3,再到6.

  

  走一步产生的损失等于剩下没有喝的位置总数,则另f[x][y][p]表示左端点x,右端点y,当前在x/y位置,最小损失为多少,转移的时候为了处理水量不能减成负数的问题,需要在枚举最终要喝多少个位置。

  4s O(n^3)有一点常数问题。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 310
#define INFL 0x3f3f3f3f3f3f3f3fLL
typedef long long qword;
int a[MAXN];
qword dp[MAXN][MAXN][];
qword dis[MAXN][MAXN];
inline void deal(qword &x,qword y)
{
x=min(x,y);
} int main()
{
freopen("input.txt","r",stdin);
int n,m;
scanf("%d%d",&n,&m);
for (int i=;i<n;i++)
scanf("%d",a+i);
a[n++]=;
qword ans=-INFL;
sort(a,a+n);
for (int i=;i<n;i++)
for (int j=;j<n;j++)
dis[i][j]=abs(a[i]-a[j]);
int x=lower_bound(a,a+n,)-a;
for (register int tot=;tot<=n;tot++)
{
memset(dp,0x3f,sizeof(dp));
dp[x][x][]=;
for (register int i=;i<=tot;i++)
{
for (register int j=;j+i-<n;j++)
{
if (dp[j][j+i-][]<INFL)
{
if (j)
deal(dp[j-][j-+(i+)-][],dp[j][j+i-][]+dis[j][j-]*(tot-i));
if (j+i-<n-)
deal(dp[j][j+(i+)-][],dp[j][j+i-][]+dis[j][j+(i+)-]*(tot-i));
}
if (dp[j][j+i-][]<INFL)
{
if (j)
deal(dp[j-][j-+(i+)-][],dp[j][j+i-][]+dis[j+i-][j-]*(tot-i));
if (j+i-<n-)
deal(dp[j][j+(i+)-][],dp[j][j+i-][]+dis[j+i-][j+(i+)-]*(tot-i));
}
}
}
for (int j=;j+tot-<n;j++)
{
ans=max(ans,(qword)m*(tot-)-min(dp[j][j+tot-][],dp[j][j+tot-][]));
}
}
printf("%lld\n",ans);
}

bzoj 1761: [Baltic2009]beetle 区间dp的更多相关文章

  1. BZOJ 1260&UVa 4394 区间DP

    题意: 给一段字符串成段染色,问染成目标串最少次数. SOL: 区间DP... DP[i][j]表示从i染到j最小代价 转移:dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k ...

  2. BZOJ 2933([Poi1999]地图-区间Dp)

    2933: [Poi1999]地图 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 7   Solved: 7 [ Submit][ Status] ...

  3. BZOJ 1055 玩具取名(区间DP)

    很显然的区间DP,定义dp[i][j][k], 如果dp[i][j][k]=1表示字符串[i,j]可以组成k字符. # include <cstdio> # include <cst ...

  4. bzoj 1068 [SCOI2007]压缩 区间dp

    [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1644  Solved: 1042[Submit][Status][Discu ...

  5. BZOJ 2121: 字符串游戏 区间DP + 思维

    Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对 于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...

  6. bzoj 1003物流运输 区间dp+spfa

    基本思路: 一开始确实没什么思路,因为觉得怎么着都会超时,然后看一下数据范围,呵,怎么都不会超时. 思路: 1.看到能改变线路,想到可以用以下区间dp,区间dp的话,先枚举长度,枚举开始位置,然后枚举 ...

  7. bzoj 1564 [NOI2009]二叉查找树 区间DP

    [NOI2009]二叉查找树 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 906  Solved: 630[Submit][Status][Discu ...

  8. BZOJ 1090 字符串折叠(区间DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...

  9. BZOJ 2298 problem a(区间DP)

    题意:一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 思路:考虑最多有多少人说真,那么答案就是n-max. ai个人分数 ...

随机推荐

  1. 读写应用程序数据-CoreData

    coreData数据最终的存储类型可以是:SQLite数据库.XML.二进制.内存里.自定义的数据类型. 和SQLite区别:只能取出整个实体记录,然后分解,之后才能得到实体的某个属性. 1.创建工程 ...

  2. Add an IPv6 route through an interface

    Not often needed, sometimes in cases of dedicated point-to-point links. 7.4.1. Using "ip" ...

  3. FileFilter, FilenameFilter用法和文件排序

    FileFilter和FilenameFilter这两个类的用法都很简单,都只有一个方法 FileFilter /*** @param pathname The abstract pathname t ...

  4. 从源码角度深入理解LayoutInflater

    关于LayoutInflater,在开发中经常会遇到,特别是在使用ListView的时候,这个几乎是必不可少.今天我们就一起来探讨LayoutInflater的工作原理. 一般情况下,有两种方式获得一 ...

  5. Java 实现顺序查找

    package search; import java.util.Scanner; /*通常把查找过程中对关键字的平均比较次数,也叫平均查找长度(ASL)作为衡量一个查找算法效率优劣的标准: * AS ...

  6. BS开发平台,一小时搞定功能强大的统计分析页面

    BS开发平台,一小时搞定功能强大的统计分析页面,拥有强大的功能和详细的权限控制. 1.组织数据,分析需求(实际耗时大约20分钟)  2.建立需要的业务数据表(大致10分钟)3. 运行代码工具,生产需要 ...

  7. MVC小系列(二十一)【带扩展名的路由可能失效】

    mvc3之后:如果路由带上扩展名,比如这样: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRout ...

  8. ios 系统参数用法

    qi前言:写一个宏来选择性地编译与运行为不同iOS所写的代码来支持多个版本的ios工程 #if __IPHONE_OS_VERSION_MIN_REQUIRED #import "xxxxx ...

  9. [python]魔术方法

    一.初始化: 1.__new__方法,初始化过程中第一个用到的方法(用处不大). 2.之后,__init__方法,构造方法. 3.最后,在对象回收时,调用__del__方法.如果解释器退出时,对象还存 ...

  10. java新手笔记16 面积

    1.图形类 package com.yfs.javase; public class Shape { //计算面积方法 public double getArea() { System.out.pri ...