P1504 积木城堡
原题链接 https://www.luogu.com.cn/problem/P1504


闲话时刻
这道题是一道 暴力 dp好题,dp 的方法和平常的不大一样,也许是我的脑回路清奇,总之还是值得做一下的 。
题目大意
有 n 组数,每组数都是从大到小排列(好像没什么用),现在从每组数中删去一些数使得每组数的和相等,问这个相等的和最大是多少;
题解
首先我们看到数据范围比较小,脑子中的第一个思路应该是暴力;
暴力什么呢?
一个简单的想法就是把每一组在一波瞎搞之后所能得到的所有可能的高度都记录下来,然后从大到小去枚举最后高度,如果每一组瞎搞之后都能达到这个高度,那么这个高度就是最优解了;
我的思路就是这样,只不过求每一组的所有可能的高度我是用的 dp 来求的,当然是暴力的复杂度qwq
状态设置
dp [ i ][ j ]:第 i 组的积木在瞎搞之后能否达到 j 的高度;
状态转移
假如说 dp [ i ][ j ] 是合法的,那么我们再移走一块积木 a [ k ],那么也是合法的,即:
dp [ i ][ j-a [ k ] ] = dp [ i ][ j- a [ k ] ] | dp [ i ][ j ](要么这个高度本来就合法,要么是 j 通过移走 a [ k ] 使其变得合法,所以中间是 | 运算)
枚举顺序
有个小细节就是:要先枚举每一组的积木再去枚举高度
这样的话才能保证每一块积木只可能被删除一次,如果枚举反了的话会出现一积木多用的现象;
答案
我们从大到小去枚举高度,如果存在一个高度使得每一组积木都可以拼成,那么直接输出并结束程序就OK了;
Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
char ch=getchar();
int a=,x=;
while(ch<''||ch>'')
{
if(ch=='-') x=-x;
ch=getchar();
}
while(ch>=''&&ch<='')
{
a=(a<<)+(a<<)+(ch-'');
ch=getchar();
}
return a*x;
}
const int N=;
int n;
int len[N],sum[N];
int a[N][N],dp[N][N*N]; //dp[i][j]:第i个城堡进行若干操作后能否得到高度为j的情况
int main()
{
n=read();
for(int i=;i<=n;i++)
{
int x=read();
while(x!=-)
{ //len[i]:第i组积木的个数
a[i][++len[i]]=x; //a[i][j]:第i组的第j个积木的高度
sum[i]+=x; //sum[i]:第i组积木的最大高度(一个积木也没有删掉的情况)
x=read();
}
dp[i][sum[i]]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=len[i];j++) //注意这里一定要先枚举每一组的积木
for(int k=;k<=sum[i];k++) //再枚举高度
dp[i][k]|=dp[i][k+a[i][j]]; //通过dp[i][k+a[i][j]]删除a[i][j]来使dp[i][k]变得合法
for(int j=;j>=;j--)
{
bool bj=;
for(int i=;i<=n;i++)
{
if(!dp[i][j]) //只要有一组拼不成就白搭
{
bj=;
break;
}
}
if(bj==) //如果都能拼成的话,此时的高度一定是最优解
{
printf("%d\n",j);
return ;
}
}
return ;
}
P1504 积木城堡的更多相关文章
- 到达型01背包---P1504 积木城堡
P1504 积木城堡 题解 到达型01背包 对于每一组城堡,它可以到达一些高度 但是我们要求的是所有背包可以到达的公共高度的最大值 f[ i ] 表示对于一组城堡,能否到达高度 j ,然后我们跑 n ...
- 洛谷P1504 积木城堡
题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木 ...
- 洛谷 P1504 积木城堡
题目传送门 解题思路: 01背包. AC代码: #include<iostream> #include<cstdio> #include<vector> using ...
- VIJOS-P1059 积木城堡
洛谷 P1504 积木城堡 https://www.luogu.org/problem/P1504 JDOJ 1240: VIJOS-P1059 积木城堡 https://neooj.com/oldo ...
- vijos1059 积木城堡[n年浙江省队第X轮](背包的方案总数 or 01背包)
描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大, ...
- vijosP1059 积木城堡
vijosP1059 积木城堡 链接:https://vijos.org/p/1059 [思路] 01背包. 刚开始想麻烦了,想的是二分答案然后01背包判断是否可行,但是首先答案不满足单调性所以不能二 ...
- 【题解】「P1504」积木城堡
这题是01背包(\(DP\)) 如何判断要拆走那个积木,首先定义一个\(ans\)数组,来存放这对积木能拼成多高的,然后如果\(ans_i = n\)那么就说明这个高度的积木可以. 话不多说,上代码! ...
- 积木城堡(dp)
题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木 ...
- SOJ 2930_积木城堡
[题意]若干个城堡,给定每个城堡的积木数及每块积木的棱长.从城堡中抽出积木使每块城堡高度相同,求最大高度 [分析]城堡的积木选择可以看成01背包问题,从最矮的城堡高度开始依次递减,求出使每个背包都能装 ...
随机推荐
- Sql 脚本文件太大 还原数据库
sql脚本太大直接在数据库中执行会提示内存不足,我们看生成的脚本文件会发现每隔100条会有一个GO来分隔,这就好说了 在我将数据库的结构连同数据生成一个脚本文件db.sql 后,想在另外的电脑上恢复数 ...
- 实时监听 JavaScript改变 input 值 input输入框内容 value 变化实时监听
思路:通过setInterval()方法去定时对比新旧值 当时候JavaScript的onchange 和onpropertychange(注意ie版本) 监听输入框input时间,人为改变值是可以触 ...
- 逆波兰表达式求值 java实现代码
根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说 ...
- 使用requests简单的页面爬取
首先安装requests库和准备User Agent 安装requests直接使用pip安装即可 pip install requests 准备User Agent,直接在百度搜索"UA查询 ...
- Install Gnome desktop
Install Gnome desktop http://www.dinggd.com/index.php/freebsd-8-0-rc1-gnome%E6%A1%8C%E9%9D%A2%E5%AE% ...
- 【洛谷 P4137】 Rmq Problem / mex(主席树)
题目链接 容易发现,可能答案只有\(0\).每个数,每个数\(+1\) 于是把这\(2n+1\)个数建立一个权值线段树,可持久化一下,每个节点记录这个子树中最后加入数加入的时间的最小值\(latest ...
- 解决Vivado XSDK在Ubuntu系统上自带UART Terminal Crash问题
在Ubuntu 18.04 LTS系统上使用某些版本的Vivado XSDK的Eclipse IDE中自带的串口Terminal会有Crash的问题.Xilinx的XSDK的Terminal插件是用的 ...
- Android ProGuard:代码混淆压缩
写这篇文章的目的 一直以来,在项目中需要进行代码混淆时每次都要去翻文档,很麻烦.也没有像写代码那样记得那么多.既然要查来查去,就不如自己捋一捋这个知识点了,被人写的终究还是别人的.所以自己去翻看了很多 ...
- ROMTableAddr = 0xE00FF003 错误 Target DLL has been cancelled 错误
JTAG下载固件错误 keil下载固件错误 如下错误 * JLink Info: Found SWD-DP with ID 0x1BA01477 * JLink Info: Found SWD-DP ...
- iOS原生与H5交互
一.WKWebView WKWebView 初始化时,有一个参数叫configuration,它是WKWebViewConfiguration类型的参数,而WKWebViewConfiguration ...