三、Sue 的小球
(ball.pas/c/cpp,限时0.5 秒,内存256M)
【题目描述】
Sue 和Sandy 最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺
激的大海上,Sue 有一支轻便小巧的小船。然而,Sue 的目标并不是当一个海盗,而是
要收集空中漂浮的彩蛋,Sue 有一个秘密武器,只要她将小船划到一个彩蛋的正下方,
然后使用秘密武器便可以在瞬间收集到这个彩蛋。然而,彩蛋有一个魅力值,这个魅力
值会随着彩蛋在空中降落的时间而降低,Sue 要想得到更多的分数,必须尽量在魅力值
高的时候收集这个彩蛋,而如果一个彩蛋掉入海中,它的魅力值将会变成一个负数,但
这并不影响Sue 的兴趣,因为每一个彩蛋都是不同的,Sue 希望收集到所有的彩蛋。
然而Sandy 就没有Sue 那么浪漫了,Sandy 希望得到尽可能多的分数,为了解决这
个问题,他先将这个游戏抽象成了如下模型:

以Sue 的初始位置所在水平面作为x 轴。

一开始空中有N 个彩蛋,对于第i 个彩蛋,他的初始位置用整数坐标(xi, yi)表
示,游戏开始后,它匀速沿y 轴负方向下落,速度为vi 单位距离/单位时间。Sue 的初始
位置为(x0, 0),Sue 可以沿x 轴的正方向或负方向移动,Sue 的移动速度是1 单位距离
/单位时间,使用秘密武器得到一个彩蛋是瞬间的,得分为当前彩蛋的y 坐标的千分之
一。
现在,Sue 和Sandy 请你来帮忙,为了满足Sue 和Sandy 各自的目标,你决定在收
集到所有彩蛋的基础上,得到的分数最高。
【输入文件】
第一行为两个整数N, x0 用一个空格分隔,表示彩蛋个数与Sue 的初始位置。
第二行为N 个整数xi,每两个数用一个空格分隔,第i 个数表示第i 个彩蛋的初始
横坐标。

第三行为N 个整数yi,每两个数用一个空格分隔,第i 个数表示第i 个彩蛋的初始
纵坐标。
第四行为N 个整数vi,每两个数用一个空格分隔,第i 个数表示第i 个彩蛋匀速沿
y 轴负方向下落的的速度。
【输出文件】
一个实数,保留三位小数,为收集所有彩蛋的基础上,可以得到最高的分数。
【样例】
输入样例(ball.in 的内容):
3 0
-4 -2 2
22 30 26
1 9 8
输出样例(ball.out 的内容):
0.000
【数据范围】
N<=20,对于30%的数据。
N<=1000,对于100%的数据。
-10^4 <= xi,yi,vi <= 10^4,对于100%的数据。

动态规划

首先可以明确的是可以将x0左边和右边的彩蛋分组

按距离x0距离的顺序排序,存入两个队列中

y之和为最多达到的分数

用f[0][i][j]表示当前在队列1的i位置,队列2已该走j位置的分数减小最小值

用f[1][i][j]表示当前在队列2的j位置,队列1已该走i位置的分数减小最小值

转移方程为

f[0,i,j]=min(f[0,i-1,j]+(w1[i]+w2[j])*(s1[i-1].x-s1[i].x),f[1,i,j-1]+(w1[i]+w2[j])*(s2[j-1].x-s1[i].x))

f[1,i,j]=min(f[0,i-1,j]+(w1[i]+w2[j])*(s2[j].x-s1[i-1].x),f[1,i,j-1]+(w1[i]+w2[j])*(s2[j].x-s2[j-1].x))

当前在y坐标之和减去min(<当前在队列1队尾,队列2已走完的分数减小最小值>,<当前在队列2队尾,队列1已走完的分数减小最小值>)

测试数据

http://mail.qq.com/cgi-bin/ftnExs_download?k=716635352cf2cbcd6241402a1865011d065605050755041d1800020354500002554b0c0652541906555f0c180f5057011a560707045306510257000c00653c3255075959191755403720&t=exs_ftn_download&code=7f557e42

program ball;
constthu:int64=1000;
typepoint=recordx,v:longint;end;
varn,x0,i,j,k,t1,t2,d1,d2:longint;ans:int64;s1,s2,bal:array [0..1001] of point;f:array [0..1,0..1001,0..1001] of int64;w1,w2:array [0..1001] of int64;procedure swap (var a,b:point);
vari:point;
begini:=a;a:=b;b:=i;
end;procedure qsort (s,e:longint);
vari,j,k:longint;
beginif s>=e then exit;i:=s;j:=e;k:=bal[(s+e) div 2].x;while i<=j dobeginwhile bal[i].x<k do inc(i);while bal[j].x>k do dec(j);if i>j then break;swap(bal[i],bal[j]);inc(i);dec(j);end;qsort(s,j);qsort(i,e);
end;beginassign(input,'ball.in');reset(input);assign(output,'ball.out');rewrite(output);read(n,x0);ans:=0;for i:=1 to n doread(bal[i].x);for i:=1 to n dobeginread(k);ans:=ans+k;end;for i:=1 to n doread(bal[i].v);qsort(1,n);t1:=0;d1:=0;for i:=n downto 1 doif bal[i].x<x0 thenbeginif (t1>0)and(bal[i].x=s1[t1].x) thens1[t1].v:=s1[t1].v+bal[i].velsebegininc(t1);s1[t1]:=bal[i];end;d1:=d1+bal[i].v;end;t2:=0;d2:=0;for i:=1 to n doif bal[i].x>x0 thenbeginif (t2>0)and(bal[i].x=s2[t2].x) thens2[t2].v:=s2[t2].v+bal[i].velsebegininc(t2);s2[t2]:=bal[i];end;d2:=d2+bal[i].v;end;fillchar(f,sizeof(f),63);s1[0].x:=x0;for i:=t1 downto 0 dow1[i]:=w1[i+1]+s1[i].v;for i:=t2 downto 1 dow2[i]:=w2[i+1]+s2[i].v;s1[t1+1].x:=s1[t1].x;s2[t2+1].x:=s2[t2].x;f[0,0,1]:=0;for i:=0 to t1+1 dofor j:=1 to t2+1 dobeginif (i=t1+1)and(j=t2+1) then continue;if (i<>t1+1)and(i>0)and(f[0,i,j]>f[0,i-1,j]+(w1[i]+w2[j])*(s1[i-1].x-s1[i].x)) thenf[0,i,j]:=f[0,i-1,j]+(w1[i]+w2[j])*(s1[i-1].x-s1[i].x);if (j<>t2+1)and(i>0)and(f[1,i,j]>f[0,i-1,j]+(w1[i]+w2[j])*(s2[j].x-s1[i-1].x)) thenf[1,i,j]:=f[0,i-1,j]+(w1[i]+w2[j])*(s2[j].x-s1[i-1].x);if (i<>t1+1)and(j>1)and(f[0,i,j]>f[1,i,j-1]+(w1[i]+w2[j])*(s2[j-1].x-s1[i].x)) thenf[0,i,j]:=f[1,i,j-1]+(w1[i]+w2[j])*(s2[j-1].x-s1[i].x);if (j<>t2+1)and(j>1)and(f[1,i,j]>f[1,i,j-1]+(w1[i]+w2[j])*(s2[j].x-s2[j-1].x)) thenf[1,i,j]:=f[1,i,j-1]+(w1[i]+w2[j])*(s2[j].x-s2[j-1].x);end;if ans-f[0,t1,t2+1]>ans-f[1,t1+1,t2] then ans:=ans-f[0,t1,t2+1]else ans:=ans-f[1,t1+1,t2];writeln(ans/1000:0:3);close(input);close(output);
end.

Sue 的小球 ball相关推荐

  1. [SDOI2008]SUE的小球

    [SDOI2008]SUE的小球 文章目录 题目描述 题解: 代码: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Form ...

  2. BZOJ 2037 Sue的小球

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2037 题意:二维平面上有一些彩蛋(x,y),每个彩蛋会下落.当移动到彩蛋下方时会获得彩蛋 ...

  3. Bzoj2037: [Sdoi2008]Sue的小球

    题面 传送门 Sol 就相当于从\(x_0\)开始左右横走,显然可以设\(f[0/1][i][j]\)表示左到\(i\)右到\(j\),当前在左/右的代价 但是不好记转移代价,因为不知道时间 那么可以 ...

  4. 2017.10.27 sue的小球 失败总结

    这个题是论文题...说这个题之前先说一下关路灯 这两个题都有时间的限制,但都不能作为状态设计进去 关路灯那个题,由于要忽略时间的限制,所以对于一个区间省得最多,是不是就是最优解了呢 首先,就算你知道这 ...

  5. python设计抽奖游戏 球_python3实现小球转动抽奖小游戏

    最近老师在讲 tkinter,所以我做了一个抽奖小游戏. 一.效果图 先上效果图.红色的小球会围绕蓝色小球做环形运动.我设置的四个角是奖品,其余的都是再接再厉. 二.方法 基于tkinter中的but ...

  6. canvas教程7-炫彩小球

    文章目录 一.炫彩小球 二.效果图 篇章 一.炫彩小球 <!DOCTYPE html> <html lang="en"> <head><m ...

  7. 用python3写一个小球转动的抽奖小游戏

    最近老师在讲 tkinter,所以我做了一个抽奖小游戏 一.效果图 先上效果图.红色的小球会围绕蓝色小球做环形运动.我设置的四个角是奖品,其余的都是再接再厉. 二.方法 基于tkinter中的butt ...

  8. Java 碰壁小球游戏实例教程

    本教程会举例用Java实现简单的小球碰壁反弹游戏,效果如图所示: JFrame: 窗体部分 首先创建一个窗体界面,下面举一个简单的例子(Jframe是自己定义的类名,注意和JFrame的区别) imp ...

  9. java 运动的大球吃小球_大球吃小球

    Ball.java package day7; import java.awt.Color; import java.awt.Graphics; public class Ball { int x,y ...

  10. 复习Java小球游戏代码分享Java面试题MySQL中常用的锁生活【记录一个咸鱼大学生三个月的奋进生活】021

    记录一个咸鱼大学生三个月的奋进生活021 复习Java小球游戏 游戏界面的代码 小球运动线程的代码 运行游戏的代码 运行结果 代码分享 学习Java面试题(MySQL中常用的锁) 照片分享 复习Jav ...

最新文章

  1. 3D游戏设计和创作工具学习教程 3D Game Design Creation Tools
  2. 近期笔试小结(附数据库工程师面试准备)
  3. python安装easy_install和pip
  4. MySQL内核源码解读-SQL解析之解析器浅析
  5. libpng error: Not a PNG file
  6. 超云将成为数据中心演化的下一个阶段
  7. java 枚举可以循环吗_(转载)java 枚举 循环遍历以及一些简单常见的使用
  8. csdn学院 python_确认!别再相信Python了! 程序员:就你敢说...
  9. 小红的记谱法(模拟+前缀和)
  10. 一个校园网络的规划与设计
  11. excel最常用的八个函数
  12. 01. Linux文件目录结构及存放内容(功能)
  13. html多行注释如何实现,html多行注释如何实现?
  14. springboot搭建项目环境以及整合其他技术
  15. 项目实践--广告排期系统
  16. 315品牌危机公关2021年最新完全指南,公关人看完神清气爽!
  17. 手游代理加盟如何避免被套路?
  18. 一个帖子引爆流行?wappblog助阵
  19. Attempted to read or write protected memory. This is often an indication that other memory is corrup
  20. java ikanalyzer分词_利用ikanalyzer分词

热门文章

  1. ubuntu16.0.4安装GNOME3
  2. Qt网络文件加密处理断点续传多文件下载器bt开源种子下载器分析附下载
  3. 宝塔+云锁nginx自编译web防护 防御CC效果极佳
  4. 平板连接远程Linux,如何从Android平板电脑远程控制Ubuntu | MOS86
  5. P2P模式文件传输网络应用的开发
  6. simulink 菜单栏 不见了
  7. 喇叭POP爆破音产生的原因与解决办法
  8. 两个文件行合并linux,linux 两个文件合并
  9. 合并多个文件内容到同一个文件
  10. 2008年度江苏地税纳税百强企业名单