zoukankan      html  css  js  c++  java
  • HDU 3720 Arranging Your Team

    先分组,然后暴力;注意  初始化时不要为0 会有负数;我直接二进制枚举; dfs是正解;呵呵

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <map>
    #include <set>
    #include <algorithm>
    using namespace std;
    
    int arr[25][25];
    map<string,int>mp;
    char str[1000],cha[1000];
    struct date{
         int val,i;
         bool operator < ( const date &a )const {
            if( a.val != val )return a.val < val;
            return a.i < i;
         }
    };
    vector<date>v[6];
    vector<date>s[6];
    char sss[5][55] = {"0","goalkeeper","defender","midfielder","striker"};
    int main( )
    {
        int num;
        while( scanf("%s%d%s",str,&num,cha) != EOF )
        {
            mp.clear(); memset( arr,0,sizeof(arr) );
            for( int i = 0; i < 6; i++ )v[i].clear();
            for( int i = 0; i < 6; i++ )s[i].clear();
             mp[str] = 1;  date temp; temp.val = num; temp.i = 1;
            for( int i = 1; i <= 4; i++ )
              if( strcmp(cha,sss[i]) == 0 ) v[i].push_back(temp);
            for( int i = 2; i <= 23; i++ )
            {
                scanf("%s%d%s",str,&num,cha); mp[str] = i;
                date temp; temp.val = num; temp.i = i;
                for( int j = 1; j <= 4; j++ )
                  if( strcmp(cha,sss[j]) == 0 )v[j].push_back(temp);
            }
            int now; cin>>now;
            while( now-- )
            {
                cin>>str>>cha>>num; arr[mp[str]][mp[cha]] = arr[mp[cha]][mp[str]] = num;
            }//cout<<v[1].size()<<" "<<v[2].size()<<" "<<v[3].size()<<" "<<v[4].size()<<endl;
            if( v[1].size() < 1 || v[2].size() < 4 || v[3].size() < 4 || v[4].size() < 2 )
            {
                cout<<"impossible"<<endl;
                continue;
            }
            for( int i = 0; i < v[1].size(); i++ )
            {
                date temp; temp = v[1][i]; temp.i = 1<<(temp.i-1);
                s[1].push_back( temp );
            }
            for( int i = 0; i < v[2].size(); i++ )
            for( int j = i+1; j < v[2].size(); j++ )
            for( int k = j+1; k < v[2].size(); k++ )
            for( int l = k+1; l < v[2].size(); l++ )
            {
                int ans = 0; int val = 0;
                date temp; temp = v[2][i]; ans += (1<<(temp.i-1));val += temp.val;
                           temp = v[2][j]; ans += (1<<(temp.i-1));val += temp.val;
                           temp = v[2][k]; ans += (1<<(temp.i-1));val += temp.val;
                           temp = v[2][l]; ans += (1<<(temp.i-1));val += temp.val;
                temp.val = val; temp.i = ans;
                s[2].push_back(temp);
            }
            for( int i = 0; i < v[3].size(); i++ )
            for( int j = i+1; j < v[3].size(); j++ )
            for( int k = j+1; k < v[3].size(); k++ )
            for( int l = k+1; l < v[3].size(); l++ )
            {
                int ans = 0; int val = 0;
                date temp; temp = v[3][i]; ans += (1<<(temp.i-1));val += temp.val;
                           temp = v[3][j]; ans += (1<<(temp.i-1));val += temp.val;
                           temp = v[3][k]; ans += (1<<(temp.i-1));val += temp.val;
                           temp = v[3][l]; ans += (1<<(temp.i-1));val += temp.val;
                temp.val = val; temp.i = ans;
                s[3].push_back(temp);
            }
            for( int i = 0; i < v[4].size(); i++ )
            for( int j = i+1; j < v[4].size(); j++ )
            {
                int ans = 0; int val = 0;
                date temp; temp = v[4][i]; ans += (1<<(temp.i-1));val += temp.val;
                           temp = v[4][j]; ans += (1<<(temp.i-1));val += temp.val;
                temp.val = val; temp.i = ans;
                s[4].push_back(temp);
            }
            int Max = (1<<30)*-1;
            for( int i = 0; i < s[1].size(); i++ )
            for( int j = 0; j < s[2].size(); j++ )
            for( int k = 0; k < s[3].size(); k++ )
            for( int l = 0; l < s[4].size(); l++ )
            {
                int ans = s[1][i].i+s[2][j].i+s[3][k].i+s[4][l].i;
                int val = s[1][i].val+s[2][j].val+s[3][k].val+s[4][l].val;
                vector<int>n; n.clear();
                for( int t = 0; t < 24; t++ )
                if( ans&(1<<t) )n.push_back(t+1);
                for( int x = 0; x < n.size(); x++ )
                for( int y = x+1; y < n.size(); y++ )
                val += arr[n[x]][n[y]];
                Max = max( Max,val );
            }
            cout<<Max<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    解决一起web 页面被劫持的案例
    django rest framwork教程之外键关系和超链接
    django restframwork 教程之authentication权限
    Puppet nginx+passenger模式配置
    Django restframwork教程之类视图(class-based views)
    使用emplace操作
    C++中的显示类型转换
    整数加法
    在不知道学生人数和每个学生课程数量的情况下对学生的平均成绩排序
    树的高度
  • 原文地址:https://www.cnblogs.com/wulangzhou/p/3432342.html
Copyright © 2011-2022 走看看