HDU-1052-Tian Ji -- The Horse Racing

刚开始用的动态规划+贪心

知道转移方程,但不知如何实现

下面为别人的思想:

f [i,j] 表示齐王按从强到弱的顺序出马和田忌进行了 i
场比赛之后,田忌从“头”取了 j 匹较强的马,从“尾”取了 i-j
匹较弱的马,所能够得到的最大盈利。

状态转移方程如下:

f[i,j]=max{f[i-1,j]+g[n-(i-j)+1,i],f[i-1,j-1]+g[j,i]}

其中g[i,j]表示田忌的马和齐王的马分别按照由强到弱的顺序排序之后,田忌的第
i 匹马和齐王的第 j 匹马赛跑所能取得的盈利,胜为200,输为-200,平为0。

若读者知道怎样实现,请留言分享您的思路,谢谢

哎,又参考了别人的代码,贪心,太贪心了

代码有改动,感谢纠错

代码如下:

#include<stdio.h>
#include<stdlib.h>

int cmp(const void *a,const void *b) //按速度由快到慢排序
{
return *(int*)b-*(int*)a;
}

int main()
{
int n,i;
int t[1005],k[1005];
while(scanf("%d",&n),n)
{
for(i=1; i<=n; i++)
scanf("%d",&t[i]);
for(i=1; i<=n; i++)
scanf("%d",&k[i]);
qsort(t+1, n, sizeof(t[0]), cmp) ; //给田忌的马排序
qsort(k+1, n, sizeof(k[0]), cmp) ; // 国王
int t_first, k_first, t_last, k_last;
t_first = k_first = 1,t_last = k_last = n ;
int flag = 1, ans = 0;
while(flag)
{
if(t_first == t_last) flag = 0; //最后一匹了
if(t[t_first] > k[k_first]) //若当前田忌最快的马比国王最快的马快
{

t_first++; //让它俩比吧,田忌最快的马变成下一匹
k_first++;
ans += 200;
}
else if(t[t_last] > k[k_last])
{
t_last--;
k_last--;
ans += 200;
}
else //以上都不满足,下面注意了。。。
{
if(t[t_last] < k[k_first]) //若田最慢比国王最快的慢,比,此if只对ans -= 200有效
ans -= 200;
t_last--; //上面的if若成立,执行这两句,不成立同样执行
k_first++; //那就是田最慢与国王最快同速
}
}
printf("%d\n",ans);
}
return 0;
}

HDU-1052-Tian Ji -- The Horse Racing,码迷,mamicode.com

时间: 2024-10-10 23:41:00

HDU-1052-Tian Ji -- The Horse Racing的相关文章

HDU 1052 Tian Ji -- The Horse Racing(贪心)(2004 Asia Regional Shanghai)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052 Problem Description Here is a famous story in Chinese history. "That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and

HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】

算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输,则连一条权为-200的边. 然而我们知道,二分图的最佳匹配算法的复杂度很高,无法满足N=2000的要求. 我们不妨用贪心思想来分析一下问题.因为田忌掌握有比赛的“主动权”,他总是根据齐王所出的马来分配自己的马,所以这里不妨认为齐王的出马顺序是按马的速度从高到低出的.由这样的假设,我们归纳出如下贪心

hdu 1052 Tian Ji -- The Horse Racing 可恶的贪心-------也算是经典贪心题吧,对于一般人来说,不看题解,应该很难做出来吧

Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 20051    Accepted Submission(s): 5869 Problem Description Here is a famous story in Chinese history. "That was about

HDU 1052.Tian Ji -- The Horse Racing【很好的贪心】【8月27】

Tian Ji -- The Horse Racing Problem Description Here is a famous story in Chinese history. "That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play horse racing with the king and others." "Both

贪心/hdu 1052 Tian Ji -- The Horse Racing

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int n; 6 int tian[1010],king[1010]; 7 bool cmp(int x,int y) 8 { 9 return x>y; 10 } 11 int main() 12 { 13 scanf("%d",&n); 14 while (n!=

HDU 1052 Tian Ji -- The Horse Racing (贪心)

题意:田忌赛马,问你田忌最多能赢多少银子. 析:贪心,绝对贪心的题,贪心策略是: 1.如果田忌当前的最快的马能追上齐王的,那么就直接赢一局 2.如果田忌当前的最慢的马能追上齐王的,那么就直接赢一局 3.如果田忌当前的最慢的马不能超过齐王的,那么就输一局,并把齐王最快的干掉 通过以上策略,就是田忌赢的最多. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #incl

HDU 1052 Tian Ji -- The Horse Racing (田忌赛马)

田忌和齐王各有N匹马,判断怎样比赛,使田忌净胜场数最多. 之前无意看到强哥写的题解(很早就做了~~囧)感觉很有意思,但是当时忘了去A 了,现在回想起来此题很是经典了,意犹未尽的感觉,直接复制题解了,思路写的很清楚了, 基本就是看着思路敲的 [解题思路]不管怎么比赛 http://www.midifan.com/moduleuser-index-400171.htmhttp://www.midifan.com/moduleuser-index.htmhttp://www.midifan.com/m

【贪心专题】HDU 1052 Tian Ji -- The Horse Racing (田忌赛马)

链接:click here~~ 题意: 田忌和齐王各有N匹马,判断怎样比赛,使田忌净胜场数最多. 之前无意看到强哥写的题解(很早就做了~~囧)感觉很有意思,但是当时忘了去A 了,现在回想起来此题很是经典了,意犹未尽的感觉,直接复制题解了,思路写的很清楚了, 基本就是看着思路敲的 [解题思路]不管怎么比赛,都要让田忌的马发挥最大价值.当然,马的第一要务是用来赢得比赛,而且要最大效益的赢,也就是要赢对方仅次于自己的马. 当他不能完成这个任务的时候就要去输,并拉对方最快的马下水,给自己后面的队友创造更

杭州电 1052 Tian Ji -- The Horse Racing(贪婪)

http://acm.hdu.edu.cn/showproblem.php? pid=1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18058    Accepted Submission(s): 5239 Problem Description Here is a f

杭电 1052 Tian Ji -- The Horse Racing(贪心)

http://acm.hdu.edu.cn/showproblem.php?pid=1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 18058    Accepted Submission(s): 5239 Problem Description Here is a fa