Gym 101606C 思维

题意:代码很简单,题意很难懂。可能打过台球的人会容易理解这个题目。大体意思是:有七种颜色的球,每种颜色对应有一个价值,现在给你桌子上剩下的球,问你怎么打能让总价值最大。打球规则是:

1.如果这次打的球是红色,那么下个打的球必须是其他颜色。

2.如果这次打的球是其他颜色(桌子上还留有红球),那么下个球必须是红色

3.如果桌子上还有红球,那么被打出去的球还可以再拿回来重新打

思路:看懂题意后,题目就不难做了。我们肯定要尽可能的来打最多次价值最大的球啊!那么所有的红球都与最大价值的球来来会替换,其他球就打自己个数次最优。特殊情况:如果桌子上只有红球,那么只能打一次满足1才行。

代码:

#include <iostream>
#include<map>
#include<cstring>
#include<algorithm>
using namespace std;
map<string,int> value;
int num[10];
int bottle[10];
int judge[10];
int main()
{
    value["red"]=1;value["yellow"]=2;value["green"]=3;value["brown"]=4;value["blue"]=5;value["pink"]=6;value["black"]=7;
    memset(num,0,sizeof(num));
    memset(judge,0,sizeof(judge));
    int N;
    cin>>N;
    int t=0;
    while(N--)
    {
        string name;
        cin>>name;
        int k=value[name];
        if(!judge[k])
        {
            judge[k]=1;
            bottle[t++]=k;
        }
        num[k]++;

    }
    sort(bottle,bottle+t);
    if(bottle[t-1]==1)
        cout<<1<<endl;
    else
    {
        int sum=0;
        for(int i=0;i<t;i++)
        {
            int sign=bottle[i];
            if(i==t-1)
                sum+=(sign*num[sign]+sign*num[1]);
            else
                sum+=sign*num[sign];
        }
        cout<<sum<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40772692/article/details/80168812