UVa 1445 - Cubist Artwork

统计正面看高度为i的竖条个数为cnt1[i], 统计侧面看高度为i的竖条个数为cnt2[i];

ans = sum( i * max( cnt1[i], cnt2[i] ) ); ( 1 <= i <= 20 )

若使方块数最少,则令高度为i的竖条从正面看和侧面看都是同一条即可。

 

#include <cstdio>

#include <cstring>

#include <cstdlib>

#include <algorithm>



using namespace std;



int cnt1[30];

int cnt2[30];



int main()

{

    int W, D;

    while ( scanf( "%d%d", &W, &D ), W || D )

    {

        memset( cnt1, 0, sizeof(cnt1) );

        memset( cnt2, 0, sizeof(cnt2) );

        for ( int i = 0; i < W; ++i )

        {

            int a;

            scanf( "%d", &a );

            ++cnt1[a];

        }

        for ( int i = 0; i < D; ++i )

        {

            int a;

            scanf( "%d", &a );

            ++cnt2[a];

        }

        int ans = 0;

        for ( int i = 0; i < 30; ++i )

            ans += i*max( cnt1[i], cnt2[i] );

        printf( "%d\n", ans );

    }

    return 0;

}

 

你可能感兴趣的:(uva)