poj 2397(二分+dp)
题意:蜘蛛侠可以上下跳,问如何跳可以使得达到的最高高度尽可能小。并且最后的位置要在地面。
解题思路:首先记录跳的所有高度和sum,蜘蛛侠所能达到的最高高度肯定在1-sum之间(否则不可能做到),标准的二分模型。同时dp[i][j]表示第i次跳到高度为j是否可行。所以dp[i][j]是一个bool变量。这里的状态方程比较好处理,详见代码。求出最小的高度,剩下的就是用dfs去搜索路径,最开始以为会超时,结果1A。。爽!!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn = 100;
int n,ans,height[maxn];
char path[maxn];
bool dp[maxn][1005],flag;bool check(int len)
{memset(dp,false,sizeof(dp));dp[1][height[1]] = true;for(int i = 1; i < n; i++)for(int j = 0; j <= len; j++){if(dp[i][j] == false) continue;if(j + height[i+1] <= len)dp[i+1][j+height[i+1]] = true;if(j - height[i+1] >= 0)dp[i+1][j-height[i+1]] = true;}return dp[n][0];
}void dfs(int cur,int len)
{if(flag) return;if(cur == n){if(len - height[cur] != 0) return;for(int i = 1; i < n; i++)printf("%c",path[i]);printf("D\n");flag = true;return;}if(len + height[cur] <= ans){path[cur] = 'U';dfs(cur+1,len + height[cur]);}if(len - height[cur] >= 0){path[cur] = 'D';dfs(cur+1,len - height[cur]);}
}int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);int sum = 0;for(int i = 1; i <= n; i++){scanf("%d",&height[i]);sum += height[i];}int l = 0, r = sum, mid;ans = -1, flag = false;while(l <= r){mid = (l + r) >> 1;if(check(mid)){ans = mid;r = mid - 1;}else l = mid + 1;}if(ans == -1)printf("IMPOSSIBLE\n");else dfs(1,0);}return 0;
}
poj 2397(二分+dp)相关推荐
- 【bzoj1044】[HAOI2008]木棍分割 二分+dp
题目描述 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且 ...
- POJ - 2018 二分+单调子段和
依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个 ...
- Fire (poj 2152 树形dp)
Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...
- Drying POJ - 3104 二分
Drying POJ - 3104 二分 http://poj.org/problem?id=3104 二分查找作用之一:查找结果,逆向求解. 最让HSQ学长头疼的就是洗衣服了.洗完 ...
- POJ 3579 二分答案
POJ 3579 二分答案 文章目录 POJ 3579 二分答案 题目 思路 代码 题目 思路 排序,二分一下答案,然后对于每一个元素看一看加上这个答案tmp之后,在数列里面排在哪里,比a[i]+tm ...
- POJ 图论分类 + DP(较全 自己又加了点)
DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...
- POJ 2096 (概率DP)
题目链接: http://poj.org/problem?id=2096 题目大意:n种bug,s个子系统.每天随机找一个bug,种类随机,来自系统随机.问找齐n种bug,且每个子系统至少有一个bug ...
- hdu1025 Constructing Roads In JGShining#39;s Kingdom(二分+dp)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1025 Problem ...
- POJ 2955 (区间DP)
题目链接: http://poj.org/problem?id=2955 题目大意:括号匹配.对称的括号匹配数量+2.问最大匹配数. 解题思路: 看起来像个区间问题. DP边界:无.区间间隔为0时,默 ...
最新文章
- AjaxControltoolkit(工具包)安装步骤说明
- linux 压缩 解压 命令大全
- mybatis第一讲:初探mybatis实现简单的查询
- python库整理:collections.defaultdict
- python with语句与contextlib
- 委托、事件的个人理解
- 如何破解您忘记的Windows密码
- [C#]struct如何支持虚方法覆盖和接口继承
- eclipse git 取远程代码_IDEA中的Git操作,看这一篇就够了!
- 高评分防火墙GlassWire:帮你监控、追踪和提升电脑安全
- css制作俄罗斯方块,H5原创俄罗斯方块(基于canvas)
- 一阶广义差分模型_计量经济学习题第5章 自相关性
- Image Segmentation
- 界面设计基础之基本窗口
- 时序分析 45 -- 时序数据转为空间数据 (四) 格拉姆角场 python 实践 (下)
- 光纤通信系统组成总结及相干光通信基础
- RK3399平台开发系列讲解(应用开发篇)1.12、RTC闹钟唤醒
- Python 下opencv 应用: 摄像头参数设置
- 聊聊我当年在培训学校做开发的经历
- 软件系统复杂性灾难及解决方案探究
热门文章
- 神策数据 App 可视化全埋点 2.0 重磅升级!抢先体验
- 产品迭代的道与术,爆款产品的打造密码 | 周四话产品
- 算法学习--买卖股票的最佳时机
- Modbus网口设备接入多比物联网云平台教程
- Crontab命令格式
- 【搬砖】【Python数据分析】Pycharm中plot绘图不能显示出来
- Linux/Centos服务器安装portsentry防恶意端口扫描
- JavaScript通过RegExp实现客户端验证
- 网络学习(二十七)Windows XP 加入 Windows Server 2003 Active Directory
- English as a medium of instruction