P1651 塔
-----------------
链接:Miku
-----------------
这是一道dp题,我么很容易发现这点。
数据范围很大,如果直接用两个塔的高度当状态,很危险,我们就必须要考虑一下优化了。
两个塔的高度其实是没有没要的,我们追求的是差值,那么,比如6 8 和7 9,很明显,无论我们怎么放,第二个就是第一个加1,无论如何。
那么我们没必要存第一个状态的,很显然,第二个更优
---------------------------
我们定义方程 dp[i][j],其中i是第几个积木,j是两个塔的高度差值,它的值是最矮的塔的高度,很明显,对于每一个积木,我们有四种可能
放在最高的,不放,放在最低的,并且放完了仍然低于高塔或者高于高塔。
答案是dp[n][0]
---------------------------
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int dp[][];
int n;
int a[];
int sum;
int main(){
memset(dp,-0x7f7f,sizeof(dp));
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%d",&a[i]);
sum+=a[i];
}
dp[][]=;
for(int i=;i<=n;++i){
for(int j=sum;j>=;--j){
dp[i][j]=max(max(dp[i-][j],dp[i-][j+a[i]]+a[i]),dp[i-][abs(j-a[i])]+max(,a[i]-j));
}
}
if(dp[n][]!=)
cout<<dp[n][];
else{
cout<<-;
}
return ;
}
Ac
---------------
P1651 塔的更多相关文章
- luogu P1651 塔
题目描述 小明很喜欢摆积木,现在他正在玩的积木是由N个木块组成的,他想用这些木块搭出两座高度相同的塔,一座塔的高度是搭建它的所有木块的高度和,并且一座塔至少要用一个木块.每个木块只能用一次,也可以不用 ...
- P1651 塔 (动态规划)
题目描述 小明很喜欢摆积木,现在他正在玩的积木是由N个木块组成的,他想用这些木块搭出两座高度相同的塔,一座塔的高度是搭建它的所有木块的高度和,并且一座塔至少要用一个木块.每个木块只能用一次,也可以不用 ...
- 【洛谷 P1651】 塔 (差值DP)
题目链接 题意:\(n\)个木块放到两个塔里,每个木块可放可不放,使得两塔高度相同且高度最大,求最大高度. 这个差值\(DP\)的思维难度还是很大的,没想出来,我就打了一个\(dfs\)骗了好像\(2 ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- 数塔问题(DP算法)自底向上计算最大值
Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数 ...
- C#递归解决汉诺塔问题(Hanoi)
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace MyExamp ...
- 数据结构0103汉诺塔&八皇后
主要是从汉诺塔及八皇后问题体会递归算法. 汉诺塔: #include <stdio.h> void move(int n, char x,char y, char z){ if(1==n) ...
- dp入门--poj 1163数塔
...
- Conquer and Divide经典例子之汉诺塔问题
递归是许多经典算法的backbone, 是一种常用的高效的编程策略.简单的几行代码就能把一团遭的问题迎刃而解.这篇博客主要通过解决汉诺塔问题来理解递归的精髓. 汉诺塔问题简介: 在印度,有这么一个古老 ...
随机推荐
- c/python 的区别
c python ...
- Navicat premium 12 for mac 无限试用
Mac 终端输入 sudo rm -Rf ~/Library/Application\ Support/PremiumSoft\ CyberTech 重启电脑 成功
- idea中使用Live Template自动生成方法所有参数打印
一 新建模板 二 设置代码模板 三 设置变量 表达式是支持groovy脚本的,所以这里写一个groovy脚本,生成给定格式的日志字符串,methodParameters()是idea内置的函数,获取方 ...
- c++中多文件的组织
参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第八章 根据书中例子学习使用类的多文件项目. 首先要将类CBox定义成一个连贯的整体,在CBox.H文件中写入相关的类定义, ...
- Struts2与OGNL的联系
1.Struts与OGNL的结合原理 (1)值栈: OGNL表达式要想运行就要准备一个OGNLContext对象,Struts2内部含有一个OGNLContext对象,名字叫做值栈. 值栈也由两部分组 ...
- 解决python报错:ImportError: No module named shutil_get_terminal_size 的方法
我的环境:Ubuntu 16.04.5 LTS 修改这个文件: $HOME/.local/lib/python2.7/site-packages/IPython/utils/terminal.py 这 ...
- java枚举类的常见用法
枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似.不过相比 ...
- python 中的反斜杠匹配的问题
关于反斜杠的匹配问题可以参考: https://www.cnblogs.com/mzc1997/p/7689235.html 文章中提出了两个概念: 字符串转义和正则转义,我觉得是理解反斜杠的关键所在 ...
- HDU_4496_逆向并查集
http://acm.hdu.edu.cn/showproblem.php?pid=4496 逆向并查集,先读取,然后从后向前join每次保存答案即可. #include<iostream> ...
- Net Core 中WebAPI有关 Session的设置,及获取
步骤一: 在Startup 文件中做相应的设置 ConfigureServices方法里添加 //ConfigureServices添加: services.AddSession(options =& ...