n<=5000个数轴上的点,有属性x,a,b,c,d,从i跳到j的代价如下:

问从s跳到t的最小代价。

方法?:先构造s->t链,然后依次插入其他点,每次选个最佳的位置。过了这题,正确性不明。

方法:从边的向左向右入手。从左到右计算时,有些点想射出一条边却还射不出,有些点想被一条边插上却没边插他,好吧那这些待插(边方向向左)待射(边方向向右)的边决定了状态。同时可以愉快地发现平时出边(右)和入边(左)是一样多的,遇到s时入边(向左)少一条,遇到t时出边(向右)少一条,这可开个变量记。

那$f(i,j)$--前i个点,j条边向右的最小代价,转移比较复杂:

如果i+1是点s,f(i,j)可以转移到f(i+1,j+1)和f(i,j);

如果i+1是点t,f(i,j)可以转移到f(i+1,j-1)和f(i,j);

否则,f(i,j)可以转移到f(i+1,j),f(i+1,j-1),f(i+1,j+1)。

当然这跟当前剩下的射出边(向右)和待入边(向左)是否足够(>0)有关。因此要判断转移的合法。

小细节:未到终态,且不在s和t之间时,向右边0的状态不合法!!

 #include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
//#include<assert.h>
#include<algorithm>
//#include<iostream>
using namespace std; int n,s,t;
#define maxn 5011
#define LL long long
int a[maxn],b[maxn],c[maxn],d[maxn],xx[maxn];
LL f[maxn][maxn];
int main()
{
scanf("%d%d%d",&n,&s,&t);
for (int i=;i<=n;i++) scanf("%d",&xx[i]);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
for (int i=;i<=n;i++) scanf("%d",&b[i]);
for (int i=;i<=n;i++) scanf("%d",&c[i]);
for (int i=;i<=n;i++) scanf("%d",&d[i]); for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
f[i][j]=1e18;
f[][]=;
int havest=;
for (int i=;i<n;i++)
{
if (i==s) havest--;
if (i==t) havest++;
(i && (havest==) && (f[i][]=1e18));
for (int j=;j<=n;j++) if (f[i][j]!=1e18)
{
if (i+==s)
{
if (j+havest) f[i+][j]=min(f[i+][j],f[i][j]+xx[i+]+c[i+]);
f[i+][j+]=min(f[i+][j+],f[i][j]-xx[i+]+d[i+]);
}
else if (i+==t)
{
if (j) f[i+][j-]=min(f[i+][j-],f[i][j]+xx[i+]+a[i+]);
f[i+][j]=min(f[i+][j],f[i][j]-xx[i+]+b[i+]);
}
else
{
if (j) f[i+][j]=min(f[i+][j],f[i][j]+a[i+]+d[i+]);
if (j+havest) f[i+][j]=min(f[i+][j],f[i][j]+b[i+]+c[i+]);
if (j && j+havest) f[i+][j-]=min(f[i+][j-],f[i][j]+*xx[i+]+a[i+]+c[i+]);
f[i+][j+]=min(f[i+][j+],f[i][j]-*xx[i+]+b[i+]+d[i+]);
}
}
}
printf("%lld\n",f[n][]);
return ;
}

Codeforces704B. Ant Man的更多相关文章

  1. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  2. React中使用Ant Table组件

    一.Ant Design of React http://ant.design/docs/react/introduce 二.建立webpack工程 webpack+react demo下载 项目的启 ...

  3. [Ant]Ant简易教程

    前言 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. Ant是纯Java语言编写的,所以具有 ...

  4. jenkins / ant / jmeter 持续集成接口自动化

    1. 将 jmeter 脚本放在/var/lib/jenkins/workspace/Jmeter_auto/jmxpath路径下 2. 点击http://jk.facebank.net.cn/job ...

  5. Maven与Ant比较

    Maven与Ant比较 0 « 上一篇:Jenkins学习三:介绍一些Jenkins的常用功能» 下一篇:Jenkins学习四:Jenkins 邮件配置 posted @ 2015-03-25 16: ...

  6. 一.Jmeter+Ant+Jenkins搭建持续集成接口性能自动化测试

    微创新作品信息 1)微创新作品描述 A.为什么诞生: 1. 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换, ...

  7. Eclipce结合Ant进行编译、打包、传输、运行

    注意: 用Ant构建时,build path只能是单级的,如默认的src,如果是类似basePath/jsr253这样的话,运行Ant build时会报错,说找不到jsr253. (此文讲述的是以an ...

  8. ant 使用指南

    一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.在实际软件开发中,有很多地方可以用到ant. 开发环境: System:Windo ...

  9. 在Eclipse中集成Ant配置

    提要:本文将向你展示如何使用Eclipse设置为Ant所用的属性值和环境变量,并简要分析如何配置Ant编辑器以便从Eclipse内部操作Ant文件. 一. 修改Ant Classpath 在使用一个可 ...

随机推荐

  1. JMeter(十一)内存溢出解决方法

    使用jmeter进行压力测试时遇到一段时间后报内存溢出outfmenmory错误,导致jmeter卡死了,先尝试在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms ...

  2. 关于k阶裴波那契序列的两种解法

    在学校的anyview的时候,遇到了这个题: [题目]已知k阶裴波那契序列的定义为f(0)=0, f(1)=0, ..., f(k-2)=0, f(k-1)=1;f(n)=f(n-1)+f(n-2)+ ...

  3. VMware Workstation安装CentOS 7和开发环境

    VMware Workstation新建虚拟机 此处使用的是VMware Workstation 10,其安装过程即是常规Windos系统下软件安装方式,略过. 安装完成双击图标: 打开虚拟机主界面: ...

  4. 构建微服务开发环境5————安装Node.js

    [内容指引] 下载Node.js: Mac下安装Node.js: Windows下安装Node.js; 查看node和npm的版本. 一.下载Node.js 访问Node.js官网:https://n ...

  5. avd manager或sdk manager无法打开

    最近开始搞安卓,使用AS启动项目时老是报各种错误,而网上这方面的资料很多都解决不了.只能边实验边做. 定位到avd manager或sdk manager无法打开,网上找了很多资料,都不能解决,知道看 ...

  6. Fresco 源码分析(序)

    1. 为什么要写这个分析的博客 其实关于Fresco的相关内容,大家上网搜索,一般可以找到一大推,但是为什么我还要写关于这个的呢,因为在网上搜索中文和英文的关于fresco的相关知识时,大家只是潜在的 ...

  7. 这是一条立了Flag的不归路

    时间2017年7月11日 14:48:40 首次激活博客园的博客来进行学习记录,立下了不算远大的小目标,下一步就是要一步一步的往前走. Java是目前最普遍的使用语言之一,作为一名测试,本应该去学习更 ...

  8. 6-Java-C(打印大X)

    题目描述: 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用空格分开 ...

  9. 使用Caliburn.Micro系列1:新建项目并引入CM

    一.WPF的几个MVVM模式实现 MVVMLight:小众的平民框架,实现简单粗暴.  pass:最近更新在15年 官网: http://www.mvvmlight.net/ 最近一篇内容全面的好文: ...

  10. 【转】UpdateData()函数

    一.总结UpdateData()函数 UpdateData(true);//用于将屏幕上控件中的数据交换到变量中. UpdateData(false);//用于将数据在屏幕中对应控件中显示出来. 当你 ...