貪心DP 田忌賽馬

2021-06-01 12:09:51 字數 1810 閱讀 1629

田忌賽馬

描述 description

中國古代的歷史故事「田忌賽馬」是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩**,如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢?

輸入格式 input format

第一行為乙個正整數n (n <= 1000) ,表示雙方馬的數量。

第二行有n個整數表示田忌的馬的速度。

第三行的n個整數為齊王的馬的速度。

輸出格式 output format

僅有一行,為田忌賽馬可能贏得的最多的錢,結果有可能為負。

樣例輸入 sample input [複製資料]

樣例輸出 sample output [複製資料]

時間限制 time limitation

各個測試點1s

type

arr=array[1..1000]of longint;

var n:longint;

a:array[1..1000]of longint;

b:array[1..1000]of longint;

f:array[0..1100,0..1100]of longint;

procedure init;

begin

assign(input,'p1048.in');

assign(output,'p1048.out');

reset(input); rewrite(output);

end;

procedure terminate;

begin

close(input); close(output);

halt;

end;

procedure qsort(var a:arr;s,t:longint);

var i,j:longint;

x,tem:longint;

begin

x:=a[(s+t)shr 1];

i:=s; j:=t;

repeat

while x>a[j] do dec(j);

while xj;

if ib then exit(a);

exit(b);

end;

procedure main;

var i,j:longint;

ans:longint;

begin

readln(n);

for i:=1 to n do read(a[i]);

for i:=1 to n do read(b[i]);

qsort(a,1,n);

qsort(b,1,n);

for i:=0 to 1100 do

for j:=0 to 1100 do

f[i,j]:=-100000000;

f[1,1]:=0;

for i:=1 to n do

for j:=1 to n do

if f[i,j]<>-100000000 then

begin

if a[i]>b[j] then f[i+1,j+1]:=max(f[i+1,j+1],f[i,j]+200);

if a[i]=b[j] then

begin

f[i+1,j+1]:=max(f[i+1,j+1],f[i,j]);

f[i,j+1]:=max(f[i,j+1],f[i,j]-200);

end;

if a[i]

田忌賽馬(貪心)

描述 中國古代的歷史故事 田忌賽馬 是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢...

田忌賽馬(貪心

給出田忌和齊王各馬的速度,求最優得分 我的貪心策略 當然是錯的 1,用我方在 可以 戰勝 或 比平 對方最慢的馬 的馬 中 最慢的馬 去比 對方最慢的馬 2,直到我方最快的馬也下場了,剩下的馬預設全部戰敗 這種策略明顯是不對的 我方的快馬的貪心策略應該是擊敗能力範圍內對方最快的馬 浪費最小 我方的慢...

田忌賽馬貪心演算法 田忌賽馬問題 貪心演算法

關於輸入 輸入包含多組測試資料.每組測試資料的第一行是乙個整數n 1 n 1000 表示田忌和齊王都擁有n匹馬。接下來一行是n個整數,表示田忌的馬的速度,下一行也是n個整數,表示齊王的馬的速度。輸入的最後以乙個0表示結束。關於輸出 對每組資料,如果田忌能贏則輸出 win 如果田忌能輸則輸出 lose...