hdu 4563 御剑术I(DP)
来源:互联网 发布:淘宝账号怎么改会员名 编辑:程序博客网 时间:2024/04/28 12:20
御剑术I
Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 182 Accepted Submission(s): 30
Problem Description
在众多武侠类游戏中,都可以看到主角衣袂飘飘地在一旁通过“气”操控剑在空中飞行来杀伤敌人的帅气场景。
“十年磨一剑,霜刃未曾试”,在刻苦练习了不知道多少个日夜之后,今天你也掌握了这一项高超的武艺。虽然你可以并行地控制多柄剑同时飞行,但为了照顾普通群众的理解需求,暂时只考虑一把剑的情形。
所谓御剑术,实质上就是通过“气”来传递信息给已经通灵的剑,在这里,我们定义为瞬间给予剑一个设定好的速度。为了简化问题,将剑看作一个大小可以忽略的点,飞行在一个“二次元”——二维世界里,假设起点为原点(0,0)。需要注意的是,在这个世界中,剑依然会受到竖直向下的大小为g=9.8的重力加速度的影响。
现在由你来控制这个点,哦不,是剑,你已经掌握了N个命令,每个命令会瞬间清除剑的所有速度,然后给它一个固定的向量速度(V_xi, V_yi),分别表示水平速度与竖直速度,每个命令最多可发出一次。你的任务是,控制剑完成水平方向上长度为L的飞行,并使其完成飞行时的高度尽可能高,也就是,Y坐标值尽可能大。
由于你对“气”掌握的并不够熟练,所以只能在整数时刻时发出命令,可以认为这里的所有速度与加速度都转化为标准值(比如,米和秒),你只能在T=0,1,… 这种时刻下达指令。你希望知道横向飞行距离固定时最高的飞行高度。
“十年磨一剑,霜刃未曾试”,在刻苦练习了不知道多少个日夜之后,今天你也掌握了这一项高超的武艺。虽然你可以并行地控制多柄剑同时飞行,但为了照顾普通群众的理解需求,暂时只考虑一把剑的情形。
所谓御剑术,实质上就是通过“气”来传递信息给已经通灵的剑,在这里,我们定义为瞬间给予剑一个设定好的速度。为了简化问题,将剑看作一个大小可以忽略的点,飞行在一个“二次元”——二维世界里,假设起点为原点(0,0)。需要注意的是,在这个世界中,剑依然会受到竖直向下的大小为g=9.8的重力加速度的影响。
现在由你来控制这个点,哦不,是剑,你已经掌握了N个命令,每个命令会瞬间清除剑的所有速度,然后给它一个固定的向量速度(V_xi, V_yi),分别表示水平速度与竖直速度,每个命令最多可发出一次。你的任务是,控制剑完成水平方向上长度为L的飞行,并使其完成飞行时的高度尽可能高,也就是,Y坐标值尽可能大。
由于你对“气”掌握的并不够熟练,所以只能在整数时刻时发出命令,可以认为这里的所有速度与加速度都转化为标准值(比如,米和秒),你只能在T=0,1,… 这种时刻下达指令。你希望知道横向飞行距离固定时最高的飞行高度。
Input
输入第一行为T,表示有T组测试数据。
每组数据以两个整数N,L开始,含义与描述对应。接下来的N行中,每行有两个整数,V_xi与V_yi。
[Technical Specification]
1. 1 <= T <= 77
2. 1 <= N <= 100
3. 1 <= L <= 100
4. 1 <= V_xi <=100
5. -100 <= V_yi <= 100
每组数据以两个整数N,L开始,含义与描述对应。接下来的N行中,每行有两个整数,V_xi与V_yi。
[Technical Specification]
1. 1 <= T <= 77
2. 1 <= N <= 100
3. 1 <= L <= 100
4. 1 <= V_xi <=100
5. -100 <= V_yi <= 100
Output
对每组数据,先输出为第几组数据,然后输出最高飞行高度,四舍五入到小数点后三位。
Sample Input
31 110 102 1010 1010 203 3010 1010 1510 20
Sample Output
Case 1: 0.951Case 2: 15.100Case 3: 30.500Hint如果御剑熟练一些,不需要在整数点发出命令,样例2的结果可以更大。但是这里,只能选择在T=0时发出命令(10,20),然后等待飞行完成。注意,测试数据大部分都是纯随机生成的。
Source
2013金山西山居创意游戏程序挑战赛——复赛(2)
Recommend
liuyiding
题解:该题可以当类01背包做,长度l为容量,v_xi为每个物品的重量,v_yi为每个物品的价值。又题目可知,除了最后一次选择的速度,其他速度必定行了整数秒,则枚举所有速度为最后选择的速度,进行dp即可
#include<stdio.h>#include<string.h>#define INF 0xffffffstruct point{ int x,y; }p[105];int n,l;double dp[105];double MAX(double a,double b){ if(a>b) return a; return b;}double DP(int z){ int i,j,k; double res=-INF,t; for(i=1;i<105;i++) dp[i]=-INF; for(dp[0]=i=0;i<n;i++) { if(i==z) continue;//由于z为最后速度,之前不能选 for(j=l;j>=0;j--) { for(k=0;k<=j/p[i].x;k++) { if(j-p[i].x*k<0||dp[j-p[i].x*k]==-1) continue; dp[j]=MAX(dp[j],dp[j-p[i].x*k]+p[i].y*k-4.9*k*k); } } } for(i=0;i<=l;i++) { if(dp[i]==-INF) continue; //若dp[i]==-INF则没有组合能到达这个点 t=(l-i)*1.0/p[z].x; res=MAX(res,dp[i]+p[z].y*t-4.9*t*t); } return res;}int main(){ int t,i,j; double h; scanf("%d",&t); for(i=1;i<=t;i++) { scanf("%d%d",&n,&l); for(j=0;j<n;j++) scanf("%d%d",&p[j].x,&p[j].y); for(h=-INF,j=0;j<n;j++) h=MAX(h,DP(j)); printf("Case %d: %.3lf\n",i,h); }}
- hdu 4563 御剑术I(DP)
- HDU 4563 御剑术I
- HDU 4563 御剑术I(背包)
- hdu 4639(dp[i]=dp[i-1]+dp[i-2])
- hdu 3033 I love sneakers!(DP)
- hdu I NEED A OFFER!(DP)
- I DP Hdu 1421
- hdu 1203I NEED A OFFER!(DP)
- hdu 3033 I love sneakers!(背包DP)
- hdu 1203 I NEED A OFFER! (水题,dp)
- HDU 1203 I NEED A OFFER!(dp)
- HDU-1203-I NEED A OFFER! (简单DP!)
- hdu 1203 I NEED A OFFER!(dp)
- HDU 1203 I NEED A OFFER! (01DP)
- HDU 1203 I NEED A OFFER!(概率DP)
- 剑术,语言和模式(转自博客园)
- hdu 1023 I NEED A OFFER!(dp)
- hdu 3033 I love sneakers! dp
- shell正则表达式, 中$(( )) 与 $( ) 还有${ }
- 分享一个Eclipse的UML插件-AmaterasUML
- Hibernate悲观锁和乐观锁
- Android获取图片指定大小的缩略图
- minicom missing characters when display
- hdu 4563 御剑术I(DP)
- VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll的解决方法
- 解决SMARTFORMS 中table 控件单行跨页的问题
- 四 动态结构建模
- 字符设备驱动程序的基本步骤
- uva-133 The Dole Queue
- 【面试】IOS面试会谈到的最基本的话题
- 关于app 的稳定性的报告
- Python学习(二)-------准备