【bzoj4244】邮戳拉力赛 背包dp
题目描述
输入
输出
样例输入
4 1
1 1 1 1
1 9 9 1
9 9 1 1
1 9 9 1
样例输出
23
题解
只可意会不可言传的非常神的背包dp,非常难写题解因此写的不好不要怪我。。。
考虑一个车站是怎么经过的,共有以下四种情况:
从后面来、往后面走,代价为d+v;
从前面来、往前面走,代价为u+e;
从后面来、往前面走,代价为d+e;
从前面来、往后面走,代价为u+v。
那么先不考虑从0直接到n+1的必经行程,中间的部分一定是一个回路。
从左向右考虑回路的每一段,必然是若干个向右的路线。把向右的路线看作左括号,向左的看作右括号,那么有:
第1种情况为'((',第2种情况为'))',第3种情况为')(',第4种情况为'()'。答案就是合法的括号序列。
设 $f[i][j]$ 表示前 $i$ 个位置,多余的'('数目为 $2j$ 的最小代价。那么考虑这4种情况即可。注意第3、4种情况可能出现多次,因此是完全背包。
转移之间需要加上回路的代价 $T·2j$ 。
最后加上从0到n+1的代价 $(n+1)T$ 即为答案。
时间复杂度 $O(n^2)$
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[3010][3010];
int main()
{
int n , m , i , j , u , v , d , e;
scanf("%d%d" , &n , &m);
memset(f , 0x3f , sizeof(f)) , f[0][0] = 0;
for(i = 1 ; i <= n ; i ++ )
{
scanf("%d%d%d%d" , &u , &v , &d , &e);
for(j = 1 ; j <= n ; j ++ ) f[i - 1][j] += j * m * 2;
for(j = 1 ; j <= n ; j ++ ) f[i][j] = min(f[i][j] , f[i - 1][j - 1] + d + v);
for(j = 0 ; j < n ; j ++ ) f[i][j] = min(f[i][j] , f[i - 1][j + 1] + u + e);
for(j = 1 ; j <= n ; j ++ ) f[i][j] = min(f[i][j] , f[i - 1][j] + d + e);
for(j = 0 ; j <= n ; j ++ ) f[i][j] = min(f[i][j] , f[i - 1][j] + u + v);
for(j = 1 ; j <= n ; j ++ ) f[i][j] = min(f[i][j] , f[i][j - 1] + d + v);
for(j = n - 1 ; ~j ; j -- ) f[i][j] = min(f[i][j] , f[i][j + 1] + u + e);
}
printf("%d\n" , f[n][0] + (n + 1) * m);
return 0;
}
【bzoj4244】邮戳拉力赛 背包dp的更多相关文章
- [BZOJ4244]邮戳拉力赛
Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车两种,上行电车沿编号增大方向行驶 ...
- 【BZOJ4244】邮戳拉力赛 DP
[BZOJ4244]邮戳拉力赛 Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车 ...
- 背包dp整理
01背包 动态规划是一种高效的算法.在数学和计算机科学中,是一种将复杂问题的分成多个简单的小问题思想 ---- 分而治之.因此我们使用动态规划的时候,原问题必须是重叠的子问题.运用动态规划设计的算法比 ...
- hdu 5534 Partial Tree 背包DP
Partial Tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- HDU 5501 The Highest Mark 背包dp
The Highest Mark Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp
B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...
- noj [1479] How many (01背包||DP||DFS)
http://ac.nbutoj.com/Problem/view.xhtml?id=1479 [1479] How many 时间限制: 1000 ms 内存限制: 65535 K 问题描述 The ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )
题意保证了是一个置换群. 根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i, ...
随机推荐
- 实现Linux下dc的功能,计算后缀表达式的值
提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值 -将运算符写在两个操作数之后的表达式称为"后缀表达式",如上面的中缀表达式可转换为后缀表达式1 2 ...
- 20145234黄斐《网络对抗技术》PC平台逆向破解
Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. ...
- Docker入门篇(二)之docker的单主机网络
Docker 安装时会自动在host上创建三个网络,我们可用 docker network ls命令查看: [root@localhost ~]# docker network ls NETWORK ...
- avaweb(三十二)——JDBC学习入门
一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
- appium自动化环境搭建
1.java开发环境JDK 2.android SDK(platform/platform tools/tools/build tools) 3.python下载安装(pip) 4.appium下载安 ...
- AWS探索及创建一个aws EC2实例
一.AWS登陆 1.百度搜索aws,或者浏览器输入:http://aws.amazon.com 2.输入账户及密码登陆(注册流程按照提示走即可) 二.创建EC2实例(相当于阿里云的ecs) 1.找到E ...
- dubbo SpringContainer
dubbo SpringContainer Spring启动类容器 SPI service provider interfaces 服务提供借口 Singleton 单例 ThreadSafe 线程安 ...
- Spring学习(3):Spring架构(转载)
1. Spring架构图 核心容器:包括Core.Beans.Context.EL模块. ●Core模块:封装了框架依赖的最底层部分,包括资源访问.类型转换及一些常用工具类. ●Beans模块:提供了 ...
- mysql 无法启动,错误1067,进程意外终止
在做项目启动mysql数据库时,经常出现 这个错误,今天总结一下 //查看了网上很多的方法,都不适用,但或许对你适用.ps:网上只提供了怎么解决这个问题,但是没有将怎么去发现问题,对症下药才是王道.而 ...
- CsvHelper文档-4映射
CsvHelper文档-4映射 类映射 有时候你的类成员和csv的header不一定对应,有时候你的csv文件根本就没有header行,你需要特别制定一个成员的index,你不能依靠.net中默认的顺 ...