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