日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sue 的小球 ball

發(fā)布時(shí)間:2023/12/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sue 的小球 ball 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
三、Sue 的小球
(ball.pas/c/cpp,限時(shí)0.5 秒,內(nèi)存256M)
【題目描述】
Sue 和Sandy 最近迷上了一個(gè)電腦游戲,這個(gè)游戲的故事發(fā)在美麗神秘并且充滿刺
激的大海上,Sue 有一支輕便小巧的小船。然而,Sue 的目標(biāo)并不是當(dāng)一個(gè)海盜,而是
要收集空中漂浮的彩蛋,Sue 有一個(gè)秘密武器,只要她將小船劃到一個(gè)彩蛋的正下方,
然后使用秘密武器便可以在瞬間收集到這個(gè)彩蛋。然而,彩蛋有一個(gè)魅力值,這個(gè)魅力
值會隨著彩蛋在空中降落的時(shí)間而降低,Sue 要想得到更多的分?jǐn)?shù),必須盡量在魅力值
高的時(shí)候收集這個(gè)彩蛋,而如果一個(gè)彩蛋掉入海中,它的魅力值將會變成一個(gè)負(fù)數(shù),但
這并不影響Sue 的興趣,因?yàn)槊恳粋€(gè)彩蛋都是不同的,Sue 希望收集到所有的彩蛋。
然而Sandy 就沒有Sue 那么浪漫了,Sandy 希望得到盡可能多的分?jǐn)?shù),為了解決這
個(gè)問題,他先將這個(gè)游戲抽象成了如下模型:

以Sue 的初始位置所在水平面作為x 軸。

一開始空中有N 個(gè)彩蛋,對于第i 個(gè)彩蛋,他的初始位置用整數(shù)坐標(biāo)(xi, yi)表
示,游戲開始后,它勻速沿y 軸負(fù)方向下落,速度為vi 單位距離/單位時(shí)間。Sue 的初始
位置為(x0, 0),Sue 可以沿x 軸的正方向或負(fù)方向移動,Sue 的移動速度是1 單位距離
/單位時(shí)間,使用秘密武器得到一個(gè)彩蛋是瞬間的,得分為當(dāng)前彩蛋的y 坐標(biāo)的千分之
一。
現(xiàn)在,Sue 和Sandy 請你來幫忙,為了滿足Sue 和Sandy 各自的目標(biāo),你決定在收
集到所有彩蛋的基礎(chǔ)上,得到的分?jǐn)?shù)最高。
【輸入文件】
第一行為兩個(gè)整數(shù)N, x0 用一個(gè)空格分隔,表示彩蛋個(gè)數(shù)與Sue 的初始位置。
第二行為N 個(gè)整數(shù)xi,每兩個(gè)數(shù)用一個(gè)空格分隔,第i 個(gè)數(shù)表示第i 個(gè)彩蛋的初始
橫坐標(biāo)。

第三行為N 個(gè)整數(shù)yi,每兩個(gè)數(shù)用一個(gè)空格分隔,第i 個(gè)數(shù)表示第i 個(gè)彩蛋的初始
縱坐標(biāo)。
第四行為N 個(gè)整數(shù)vi,每兩個(gè)數(shù)用一個(gè)空格分隔,第i 個(gè)數(shù)表示第i 個(gè)彩蛋勻速沿
y 軸負(fù)方向下落的的速度。
【輸出文件】
一個(gè)實(shí)數(shù),保留三位小數(shù),為收集所有彩蛋的基礎(chǔ)上,可以得到最高的分?jǐn)?shù)。
【樣例】
輸入樣例(ball.in 的內(nèi)容):
3 0
-4 -2 2
22 30 26
1 9 8
輸出樣例(ball.out 的內(nèi)容):
0.000
【數(shù)據(jù)范圍】
N<=20,對于30%的數(shù)據(jù)。
N<=1000,對于100%的數(shù)據(jù)。
-10^4 <= xi,yi,vi <= 10^4,對于100%的數(shù)據(jù)。


動態(tài)規(guī)劃

首先可以明確的是可以將x0左邊和右邊的彩蛋分組

按距離x0距離的順序排序,存入兩個(gè)隊(duì)列中

y之和為最多達(dá)到的分?jǐn)?shù)

用f[0][i][j]表示當(dāng)前在隊(duì)列1的i位置,隊(duì)列2已該走j位置的分?jǐn)?shù)減小最小值

用f[1][i][j]表示當(dāng)前在隊(duì)列2的j位置,隊(duì)列1已該走i位置的分?jǐn)?shù)減小最小值

轉(zhuǎn)移方程為

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))

當(dāng)前在y坐標(biāo)之和減去min(<當(dāng)前在隊(duì)列1隊(duì)尾,隊(duì)列2已走完的分?jǐn)?shù)減小最小值>,<當(dāng)前在隊(duì)列2隊(duì)尾,隊(duì)列1已走完的分?jǐn)?shù)減小最小值>)


測試數(shù)據(jù)

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.


總結(jié)

以上是生活随笔為你收集整理的Sue 的小球 ball的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。