hdu 1052 贪心

来源:互联网 发布:电脑有些什么软件 编辑:程序博客网 时间:2024/05/19 05:38

方法来自:http://www.cnblogs.com/Action-/archive/2012/07/03/2574744.html

1.当田忌最慢的马比齐王最慢的马快,赢一场先。因为始终要赢齐王最慢的马,不如用最没用的马来赢它。
2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场。因为田忌最慢的马始终要输的,不如用它来消耗齐王最有用的马。
3.当田忌最慢的和齐王最慢的马慢相等时,分4和5讨论。
4.当田忌最快的马比齐王最快的马快时,赢一场先。因为最快的马的用途就是来赢别人快的马,别人慢的马什么马都能赢。
5.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场,因为反正要输一场,不如拿最没用的马输。
6.当田忌最快的马和齐王最快的马相等时,这就要展开讨论了,贪心方法是,拿最慢的马来和齐王最快的马比.

AC代码如下:

#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;int cmp( const void* a, const void* b ){return *(int*)b - *(int*)a;}int main(){int a[1001], b[1001];int a1, a2, b1, b2;int N;while( scanf( "%d", &N ), N ){for( int i = 0; i < N; i++ ){cin >> b[i];}for( int i = 0; i < N; i++ ){cin >> a[i];}qsort( a, N, sizeof( int ), cmp );qsort( b, N, sizeof( int ), cmp );int ans = 0;a1 = b1 = 0;a2 = b2 = N - 1;for( int i = 0; i < N; i++ ){if( b[b2] > a[a2] ){ans += 200;b2--;a2--;}else if( b[b2] < a[a2] ){ans -= 200;a1++;b2--;}else{if( b[b1] < a[a1] ){b2--;a1++;ans -= 200;}else if( b[b1] > a[a1] ){a1++;b1++;ans += 200;}else{if( b[b2] > a[a1] ){ans += 200;a1++;b2--;}else if( b[b2] < a[a1] ){ans -= 200;a1++;b2--;}else{a1++;b2--;}}}}cout << ans << endl;}return 0;}