[Tyvj1114 搭建双塔]
[题目来源]:VIjos
[关键字]:动态规划
[题目大意]:用n块水晶搭建两个塔,要求双塔必须一样高,问最大能达到的高度为多少。
//============================================================================================================
[分析]:用f[i,j]表示使用前i个水晶,建起高度差为j的双塔时,较矮的那个塔的最大高度是多少。这样的话,对于每一块水晶都有三种决策,不使用,放到高塔上,放到矮塔上.而放到矮塔上会有两种情况,一是使矮塔的高度超过了高塔,二是没有超过。具体如下:
if f[1-t,j]>f[t,j] then f[t,j]:=f[1-t,j];//不使用
if f[1-t,j]>f[t,j+h[i]] then f[t,j+h[i]]:=f[1-t,j];//高塔
if j>=h[i]//判断会不会使矮塔变成高塔
then
begin
if f[1-t,j]+h[i]>f[t,j-h[i]] then f[t,j-h[i]]:=f[1-t,j]+h[i];
end//不会
else
begin
if f[1-t,j]+j>f[t,h[i]-j] then f[t,h[i]-j]:=f[1-t,j]+j;
end;//会
这样DP就可以了。边界是f[0,0]:=0;目标是f[n,0];
//出自tyvj1114题解
//==========================================================================================================
[代码]:
1 program Project1; 2 var 3 n: longint; 4 a, s: array[0..200] of longint; 5 f: array[0..200,0..2500] of longint; 6 7 procedure init; 8 var 9 i: longint;10 begin11 readln(n);12 for i := 1 to n do read(a[i]);13 for i := 1 to n do s[i] := s[i-1]+a[i];14 end;15 16 procedure work;17 var18 i, j: longint;19 begin20 fillchar(f,sizeof(f),200);21 f[0,0] := 0;22 for i := 1 to n do23 for j := 0 to s[i] do24 begin25 if f[i-1,j] > f[i,j] then f[i,j] := f[i-1,j];26 if f[i-1,j] > f[i,j+a[i]] then f[i,j+a[i]] := f[i-1,j];27 if j >= a[i] then28 if f[i-1,j]+a[i] > f[i,j-a[i]] then f[i,j-a[i]] := f[i-1,j]+a[i];29 if j < a[i] then30 if f[i-1,j]+j > f[i,a[i]-j] then f[i,a[i]-j] := f[i-1,j]+j;31 end;32 if f[n,0] > 0 then writeln(f[n,0]) else writeln('Impossible');33 end;34 35 begin36 assign(input,'c:\1.in');reset(input);37 assign(output,'c:\1.out');rewrite(output);38 init;39 work;40 close(input);41 close(output);42 end.
转载于:https://www.cnblogs.com/procedure2012/archive/2011/11/09/2243319.html
[Tyvj1114 搭建双塔]相关推荐
- 【VIJOS - P1037】搭建双塔(dp)
题干: 描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念"9?11"事件,Mr. F决定自己用水晶来搭建一座双塔. ...
- vijos 搭建双塔
描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念"9?11"事件,Mr. F决定自己用水晶来搭建一座双塔. Mr. ...
- 推荐系统中的双塔模型
文章目录 1. 为什么要学习DSSM双塔模型 2. DSSM模型理论知识 2.1 DSSM模型的原理 2.2 DSSM深度语义匹配模型整体结构 2.2.1 输入层 2.2.2 表示层 2.2.3 匹配 ...
- 洛谷 深基 第4部分 基础数学与数论(19-21课)
洛谷 深基 第4部分 基础数学与数论 第19章 位运算与进制转换 P1143 进制转换 https://www.luogu.com.cn/problem/P1143 洛谷P1143 进制转换的Pyt ...
- 腾讯广告:广告场景下有哪些视觉算法应用?
AI算法特别是深度学习近年发展迅猛,应用范围大幅提高,为各领域提供了智能解决方案.在2019腾讯广告算法大赛的总决赛现场,腾讯广告高级应用研究员石瑞超为大家带来题为<广告场景下的视觉算法应用&g ...
- 备战NOIP每周写题记录(一)···不间断更新
※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday ...
- 一句话以上题解及注意事项整理已完成的题目(1)
jdfz.com 1001 A+B 1006 pla 一维DP+单调栈优化 1007 美食家 贪心策略,尽可能多选 1008 牛排序 二分查找+贪心策略 1009 护花 贪心策略,每次移动y/x最大的 ...
- 动态规划常见类型总结
本文针对动态规划的常见类型进行总结.虽说总结的是动态规划,但顺便把递推也放了进来.严格来说,递推不属于动态规划问题,因为动态规划不仅有递推过程,还要有决策(即取最优),但广义的动态规划是可以包含递推的 ...
- linux用户间文件互传,windows和linux间互传文件
方法1:Xshell传输文件 用rz,sz命令在xshell传输文件 很好用,然后有时候想在windows和linux上传或下载某个文件,其实有个很简单的方法就是rz,sz 首先你的Ubuntu需要安 ...
最新文章
- spring mvc文件上传小例子
- 引用 提高开发水平的几项必备技术
- asp.net中GridView传多个值到其它页面的方法
- Community Server系列之九:CS2中的用户管理1(MemberRole)
- WinCE驱动编写小结(转载)
- ShopNC【B2B2C】多用户电商平台系统,带WAP,微商城,圈子,门户
- 艾伟_转载:扩展方法 之 基本数据篇
- 冲动是魔鬼——4.25
- 操作系统 第二部分 进程管理(三)
- 手机远程访问HTML5,如何使用手机连接远程桌面?
- 家庭版联想台式计算机,联想台式机预装win10家庭版升级win10专业版方法教程
- CFSSL 生成证书
- 快速达成目标的12种方
- 不懂PS怎么修改图片尺寸?
- pt-osc在线重建表导致死锁的分析及对应的优化方案
- 无线网卡dns服务器地址怎么查询,技术编辑教你win10系统查看无线网卡DNS、IP地址的设置教程...
- 单元测试我们需要知道哪些?
- 表格标题位置-CSS入门基础(020)
- 活码二维码分流规则使用说明
- PAMI-2021:5篇顶级GNN论文
热门文章
- MYSQL的函数有哪些?(4.3时间与日期函数)
- MVC实现实现文件流打包成压缩包
- kafka java api 删除_使用Java API创建(create),查看(describe),列举(list),删除(delete)Kafka主题(Topic)...
- python入门之运算符的使用的答案_python入门教程之基本算术运算符
- java文件流null_JAVA 获取资源文件对象为NULL
- qt 设计师缩放_重新设计缩放体验
- 美学设计评价_死亡的孩子无法使用的设计美学
- C语言之指针与数组总结
- NSA泄露的恶意软件DoublePulsar感染了数万台Windows电脑
- 从cpp向qml文件传中文字符串的方法