hihocoder-1274 自行车架(高维dp)
描述
小Hi的宿舍楼下有一块用于停自行车的区域。平时自行车都停得非常杂乱,于是楼长打算去买一排自行车架用来停车。自行车架一般有P个槽,每个槽的两侧都可以停入自行车;但是一个槽位同时只能有一侧停入自行车。此外,停入一辆自行车会导致无法在这一侧的附近若干个槽位中停入自行车。
经过调查,这栋宿舍楼的学生共拥有N辆A型自行车、M辆B型自行车和K辆C型自行车。其中A型自行车会导致这一侧的左右各1个槽位不能使用,B型自行车会导致这一侧的左右2个槽位不能使用,C型自行车会导致这一侧的左右3个槽位不能使用。
现给定N、M和K,楼长希望知道P至少要是多少,才能将所有自行车都停入。

如图中所示,P最少为7就可以存放下2辆A型,1辆B型和2辆C型。
输入
每个输入文件包含多组测试数据,在每个输入文件的第一行为一个整数Q,表示测试数据的组数。
每组测试数据为3个整数N、M和K,意义如前文所述。
对于20%的数据,满足0<=N、M、K<=2,Q=100
对于40%的数据,满足0<=N、M、K<=50,Q=100
对于100%的数据,满足0<=N、M、K<=50,1<=Q<=100000
输出
对于每组测试数据,输出一个整数P,表示自行车架至少需要的槽位。
- 样例输入
-
4
2 1 2
1 0 0
2 0 2
1 2 2 - 样例输出
-
7
1
5
7
AC代码:#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf=1e8+;
int dp[][][][][][],ans;
int get_dp()
{
memset(dp,inf,sizeof(dp));
dp[][][][][][]=;
dp[][][][][][]=;
dp[][][][][][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int k=;k<=;k++)
{
for(int li=;li<;li++)
{
for(int lj=;lj<;lj++)
{
for(int lk=;lk<=;lk++)
{
if(dp[i][j][k][li][lj][lk]!=inf)//i个A,j个B,k个C,li为长的那一列的最上面的类型,lj为短的,lk为长的与短的相距多少,
{
for(int ad=;ad<;ad++)
{
int fi=i,fj=j,fk=k;
if(ad==)fi++;
if(ad==)fj++;
if(ad==)fk++;
int flk=lk+max(li,ad)+;
if(flk>)flk=;
dp[fi][fj][fk][ad][lj][flk]=min(dp[fi][fj][fk][ad][lj][flk],dp[i][j][k][li][lj][lk]+max(li,ad)+);
flk=max(max(lj,ad)+-lk,);
if(flk>)flk=;
dp[fi][fj][fk][ad][li][flk]=min(dp[fi][fj][fk][ad][li][flk],dp[i][j][k][li][lj][lk]+flk);
} }
}
}
}
}
}
}
}
int main()
{
int t,n,m,l;
scanf("%d",&t);
get_dp();
dp[][][][][][]=;
while(t--)
{
scanf("%d%d%d",&n,&m,&l);
ans=inf;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
for(int k=;k<=;k++)
{
ans=min(ans,dp[n][m][l][i][j][k]);
}
}
}
printf("%d\n",ans);
}
return ;
}
hihocoder-1274 自行车架(高维dp)的更多相关文章
- 【学时总结】◆学时·VII◆ 高维DP
◆学时·VII◆ 高维DP 自学之余,偶遇DP…… ◇ 算法概述 顾名思义——一种处理多方面状态的DP,这种DP特点是……每一维的大小都不算太大(不然用dp数组存储下来内存会炸),而且枚举时容易超时… ...
- [hihocoder 1033]交错和 数位dp/记忆化搜索
#1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an - 1 ...
- 数数(高维DP)
T1 数数 [问题描述] fadbec 很善于数数,⽐如他会数将 a 个红球,b 个黄球,c 个蓝球,d 个绿球排成⼀列,任意相邻不同⾊的数⽬. 现在 R 君不知道 fadbec 数的对不对,想让你也 ...
- HihoCoder - 1048 状压DP 经典题
hihocoder题解说的十分清晰了,这份代码就是从讲解里学习的 方案数就是不断枚举合法状态下横放竖放或两者均可 合法判断的依据是记录当前行和下一行的状态 防止重复枚举的方法是先按行后按列 递归基瞎写 ...
- hihoCoder 1033 : 交错和 数位dp
思路:数位dp,dp(i, j, k)表示考虑i位数,每位数可以任意取[0~9],并且这i位数的交错和为j,k=1表示前缀全是0(如000456),k=0表示前缀不为0.注意,前缀是否为0是这道题的一 ...
- hihocoder #1580 : Matrix (DP)
#1580 : Matrix 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Once upon a time, there was a little dog YK. On ...
- HihoCoder 1063 : 缩地 树形DP第二题(对象 边)
时间限制:12000ms 单点时限:1000ms 内存限制:256MB 描述 编织者是 Dota 系列中的一个伪核,拥有很强的生存能力和线上消耗能力.编织者的代表性技能是缩地.缩地带来的隐身.极限移动 ...
- HihoCoder - 1044 状压DP 初步
本题主要难在状态的转移 定义\(dp[i][j]:\)前\(i\)个中\(j\)集合范围内的最优解 \(j\)定义为\(p_1,p_2,...,p_{m-1}\),若第\(i-j+1\)个选定,则\( ...
- 动态规划:高维DP
例子当然是王八棋这道题,这道题以前是写烂了 先来一个大暴力,zlw教的暴力~~ #include<iostream> using namespace std; ,maxm=; ]; int ...
随机推荐
- nginx(Window下安装 & 配置文件参数说明 & 实例)
一.为什么需要对Tomcat服务器做负载均衡: Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站 ...
- 调整虚拟机中Linux的分辨率
1 在虚拟机配置中,将显示的缓存提高,CPU也提高. 2 运行Linux,在system-preferences-display中调整分辨率
- elasticsearch从入门到出门-04-入门的几个需求练手
第一个分析需求:计算每个tag下的商品数量 GET /ecommerce/product/_search{ "aggs": { "group_by_tags&qu ...
- window.scrollTo(0,document.body.scrollHeight)
滑轮到页面底部 左下角window.scrollTo(0,document.body.scrollHeight) 右下角window.scrollTo(document.body.scrollWidt ...
- PoC简介
无线一键通功能,POC(PTT Over Cellular)也称PTT(Push To Talk)功能.PTT:一键通(Push-to-Talk)功能是一种全新的移动技术,可以快速地进行"一 ...
- emmet缩写格式
2016年5月30日 10:10 标准网页<!DOCTYPE html> <html lang="zh-CN"> <head> <meta ...
- Hadoop初体验(续)--YARN
1.Hadoop已经安装完成并启动成功 复制mapred-site.xml.template重命名为mapred-site.xml /etc/hadoop/mapred-site.xml.templa ...
- windows下php升级到7.2
1: 官网下载:https://windows.php.net/download#php-7.2
- 如何将cordova导入Android studio,只需两步即可
Cordova的技术交流新群 微信公众号:
- mysql 大数据 查询方面的测试
---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适应场景: 适用于数据量较少的情况(元组百/千 ...