ZCMU 1059: 田忌赛马

Description


田忌和齐王赛马,两人各出n匹马,赢一场比赛得200两银子,输了赔200银子,平局不赔不赚.已知两人每匹马的速度,问田忌最多能赢多少银子.

Input


多组测试数据,
每组数据的第一行是一个整数n。 (1<=n<=1000)
第二行包括n个整数既田忌每匹马的速度.
第三行包括n个整数既齐王每匹马的速度.
每匹马的速度不超过1000.

Output

对于每组数据输出一行有一个整数代表田忌最多能赢多少银子
Sample Input

92 83 71  
95 87 74 

20 20 
20 20 

20 19 
22 18 
Sample Output
200
0
0

参考博客https://blog.csdn.net/qq_41489727/article/details/80410707

              https://blog.csdn.net/qq_38735931/article/details/81190585

【思路】贪心方法:

1.当田忌最慢的马比齐王最慢的马快,赢一场先

2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场
3.当田忌最快的马比齐王最快的马快时,赢一场先。
4.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场。
5.当田忌最快的马和齐王最快的马相等时,拿最慢的马来和齐王最快的马比.

​#include
using namespace std;
const int maxn=1010;
int a[maxn],b[maxn];
bool cmp(int a,int b){//降序 
    return a>b;
}
int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		int i,j,lena,lenb;
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		for(i=0;ib[lenb]){//如果田忌最慢的马比齐王最慢的马快,那么赢一场。
				sum++;
				lena--;
				lenb--;
			}
			else if(a[i]>b[j]){ //如果田忌最快的马比齐王最快的马快,也赢一场 
				sum++;
				i++;
				j++;
			}
			else{//.如果田忌最慢的马比齐王最慢的马慢或者最快的比最快的慢,那么田忌最慢的干齐王最快的,这样肯定会输,除了相等的情况。 
				if(a[lena]!=b[j])sum--;
				lena--;j++;
			}
		}
		cout<
#include 
#include 
#include 
using namespace std;
const int maxn = 1010;
int a[maxn],b[maxn];
int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        int ans = 0;
        for(int i=0;i=j;i--)
        {
            if(a[q]<=b[i])//最快的马比齐王的慢或打平,则比较最慢的马
            {
                while(a[f]>b[j]) //最慢的马和齐王的最慢的马比较
                {
                    ans +=200;
                    f++; j++;
                }
                                 //最慢的马和齐王最快的马比较

                if(a[f]

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部。

贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关最求解。

你可能感兴趣的:(贪心算法,ZCMU)