HDU-1052 划水记录1

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU-1052 划水记录1相关的知识,希望对你有一定的参考价值。

题目:
题目描述:
田忌赛马的故事众所都知,田忌与国王赛马,赢一场赚200,输一场亏200,平局没有影响。问田忌最大能赚多少。
输入:
输入数据多达50个测试案例。每一个数据都是由一个正整数n(1000个)开始,这是马的数目。第二行每一个整数是田忌的马的速度。第三行的每一个整数是国王的马的速度。n为0则输入结束。
输出:
对于每一个输入的情况,输出一行包含一个单一的数字,这是田忌将获得的最大的钱数。

思路:
能用最差的马弄对面最差的马就用最差的马 否则用最差的马换对方最好的马。
代码

#include <stdio.h>
//用了排序方便处理
void sort(int *a, int left, int right)
{
    if (left >= right) 
    {
        return;
    }
    int i = left;
    int j = right;
    int key = a[left];

    while (i < j)                              
    {
        while (i < j && key <= a[j])

        {
            j--;
        }

        a[i] = a[j];

        while (i < j && key >= a[i])

        {
            i++;
        }

        a[j] = a[i];
    }

    a[i] = key; 
    sort(a, left, i - 1); 
    sort(a, i + 1, right); 
}
int main()
{
    int SL = 0;
    int XHBL = 0;
    int DYFS = 0;
    int *DYZZ = 0;
    int *DEZZ = 0;
    int *DEJWZZ = 0;
    int DIYIZU[10] = { 0 };
    int DIERZU[10] = { 10 };
    scanf("%d",&SL);
    for (XHBL = 0; XHBL < SL; XHBL++)
        scanf("%d", &DIYIZU[XHBL]);

    for (XHBL = 0; XHBL < SL; XHBL++)
        scanf("%d", &DIERZU[XHBL]);

    sort(DIYIZU,0, SL-1);
    sort(DIERZU,0, SL-1);

    DYZZ = &DIYIZU[0];
    DEZZ = &DIERZU[0];
    DEJWZZ = &DIERZU[SL - 1];
    for (XHBL=0;XHBL<SL;XHBL++)
    {
        if (*DYZZ >= *DEZZ) //这里是如果两马速度相等就打平还是齐王赢? 这里算作平等
        {
            if(*DYZZ!= *DEZZ)
                DYFS += 200;
            DYZZ++;
            DEZZ++;
        }
        else
        {
            DEJWZZ--;
            DYZZ++;
            DYFS -= 200;
        }
    }
    printf("Tianji InTotal:%d", DYFS);
    return 0;
}

以上是关于HDU-1052 划水记录1的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1052 贪心+dp

hdu1052

hdu 1052 田忌赛马

Tian Ji -- The Horse Racing / HDU - 1052

hdu 1052 Tian Ji -- The Horse Racing

hdu-1052(贪心)