zoukankan      html  css  js  c++  java
  • hdu6789 Fight(暴力枚举)

    #include<bits/stdc++.h>
    typedef  long long ll ;
    #define mod 99999997
    #define gcd __gcd
    #define rep(i , j , n) for(int i = j ; i <= n ; i++)
    #define red(i , n , j)  for(int i = n ; i >= j ; i--)
    #define ME(x , y) memset(x , y , sizeof(x))
    #define INF  0x3f3f3f3f
    #define PI acos(-1)
    #define pii pair<int,int>
    #define fi first
    #define se second
    #define pb push_back
    #define mp make_pair
    #define all(v) v.begin(),v.end()
    #define size(v) (int)(v.size())
    #define lson l,mid,root<<1
    #define rson mid+1,r,root<<1|1
    #define int ll
    using namespace std;
    const int maxn = 1e5+9;
    const int N = 35;
    
    //此题要抓住本质,最优解与打架的先后顺序无关,只与ab,bc,ac各打了几次
    //所以枚举ab,bc打了几次.就能确定ac打了几次答案取最小值
    void solve(){
        int x , y , z ;
        scanf("%lld%lld%lld" , &x , &y , &z);
        int xy = di((ll)1000 , max(x , y));
        int yz = di((ll)1000 , max(y , z));
        int ans = INF;
        rep(i , 0 , xy){//枚举ab
            int fa = 1000 - i*y;
            int fb = 1000 - i*x;
            int fc = 1000 ;
            rep(j , 0 , yz){
                int b = fb - j*z;
                int c = fc - j*y;
                int a = fa ;
                int k = 0;
                if(a > 0 && b > 0 && c > 0){
                    if(di(a , z) == di(c , x)){//如果ac能够同时消灭,则是一组解,否则不能组成一组解
                        ans = min(ans , i+j+di(a , z));
                    }
                    continue;
                }
                if(a > 0 && b > 0 && c <= 0){//c已经被消灭
                    k = min(di(a , y) , di(b , x));
                    ans = min(ans , i+j+k);
                }
                else if(b > 0 && c > 0 && a <= 0){//a已经被消灭
                    k = min(di(b , z) , di(c , y));
                    ans = min(ans , i+j+k);
                }
                else if(a > 0 && c > 0 && b <= 0){//b已经被消灭
                    k = min(di(a , z) , di(c , x));
                    ans = min(ans , i+j+k);
                }
                else{//已经有两个消灭了
                    ans = min(ans , i+j);
                }
            }
        }
        printf("%lld
    " , ans);
    }
    
    signed main()
    {
    /*#ifdef ONLINE_JUDGE
    #else
        freopen("D:\c++\in.txt", "r", stdin);
    #endif*/
        int t ; scanf("%lld" , &t); while(t--)
            solve();
    }
    
    
  • 相关阅读:
    Something about the "BSTR" and "SysStringLen"
    关于 i = i ++ 的问题
    duilib写个三国杀?
    关于WM_GETTEXT的应用
    hoops暂时用过的一些方法
    Hoops随便记的
    C++ win32线程数上限
    windows系统时间(SYSTEMTIME)
    Form表单提交的那些事
    多行文字溢出...
  • 原文地址:https://www.cnblogs.com/nonames/p/13381431.html
Copyright © 2011-2022 走看看