中國古代的歷史故事「田忌賽馬」是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩**,如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢?
第一行為乙個正整數n (n <= 1000) ,表示雙方馬的數量。
第二行有n個整數表示田忌的馬的速度。
第三行的n個整數為齊王的馬的速度。
僅有一行,為田忌賽馬可能贏得的最多的錢,結果有可能為負。
392 83 71
95 87 74
200
#include#include#include
#include
#define inf 1<<30
using
namespace
std;
bool cmp(int i,int
j)int n,f[3005][3005],a[3005],b[3005],c[3005][3005
];int
main()}f[
0][0]=0
;
for(int i=1;i<=n;i++)
}int ans=0
;
for(int i=0;i<=n;i++) ans=max(f[n][i],ans);
printf(
"%d\n
",ans*200
);
return0;
}
之前看別人方程理解錯了,然後就沒有然後了,以下是引用的題解
dp方程
設f[i,j]表示齊王按從強到弱的順序出馬和田忌進行了i場比賽之後,田忌從「頭」取了j匹較強的馬,從「尾」取了i-j匹較弱的馬,所能夠得到的最大盈利。
狀態轉移方程如下:
f[i,j]=max
其中c[i,j]表示田忌的馬和齊王的馬分別按照由強到弱的順序排序之後,田忌的第i匹馬和齊王的第j匹馬賽跑所能取得的盈利,勝為1,輸為-1,平為0。
結果用最大的乘以200即可。
tyvj p1048 田忌賽馬 (0 100分)
描述 description 中國古代的歷史故事 田忌賽馬 是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊...
TYVJ 1048 田忌賽馬 貪心解法
中國古代的歷史故事 田忌賽馬 是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢?第一...
nyoj 田忌賽馬
題目大意 第一行給出n表示有n場比賽,以下兩行分別給出n個數,分別表示田忌和齊王n匹馬的速度,贏家從輸者手中獲得200錢,求田忌最多能贏多少錢。思路 1.先把兩者的馬按速度從大到小排序 2.從最大的馬開始比較,若出現齊王的馬比田忌的馬快,先暫停。3.將此時齊王最快的馬和田忌最慢的馬比賽,田忌輸掉一局...