1. 程式人生 > >HDU 4811 Ball(貪心)

HDU 4811 Ball(貪心)

題意:

給你三種顏色的球若干,讓你制定一個安防策略,使得你的分數最高分的規則是:當前安放的球前面的顏色的種類a+後面的顏色的種類b(不包括本身)
首先我們肯定是把球往中間放,如果能夠讓前面後面都有三種顏色的話,那剩下的球的分數都是固定的,所以說我們只要先構造出一種情況是的前面後面的不同顏色種數最多即可,剩下的就直接算了。

程式碼:

//
//  Created by  CQU_CST_WuErli
//  Copyright (c) 2016 CQU_CST_WuErli. All rights reserved.
//
#include <iostream>
#include <cstring>
#include <cstdio> #include <cstdlib> #include <cctype> #include <cmath> #include <string> #include <vector> #include <list> #include <map> #include <queue> #include <stack> #include <set> #include <algorithm> #include <sstream>
#define CLR(x) memset(x,0,sizeof(x)) #define OFF(x) memset(x,-1,sizeof(x)) #define MEM(x,a) memset((x),(a),sizeof(x)) #define BUG cout << "I am here" << endl #define lookln(x) cout << #x << "=" << x << endl #define SI(a) scanf("%d",&a) #define SII(a,b) scanf("%d%d",&a,&b)
#define SIII(a,b,c) scanf("%d%d%d",&a,&b,&c) #define rep(flag,start,end) for(int flag=start;flag<=end;flag++) #define Rep(flag,start,end) for(int flag=start;flag>=end;flag--) #define Lson l,mid,rt<<1 #define Rson mid+1,r,rt<<1|1 #define Root 1,n,1 #define BigInteger bign const int MAX_L=2005;// For BigInteger const int INF_INT=0x3f3f3f3f; const long long INF_LL=0x7fffffff; const int MOD=1e9+7; const double eps=1e-9; const double pi=acos(-1); typedef long long ll; using namespace std; ll r,y,b; int main(int argc, char const *argv[]) { #ifdef LOCAL freopen("C:\\Users\\john\\Desktop\\in.txt","r",stdin); // freopen("C:\\Users\\john\\Desktop\\out.txt","w",stdout); #endif while(cin >> r >> y >> b) { ll ans=0; int pre,suf; pre=suf=0; if (r) pre++,r--; if (y) pre++,y--; if (b) pre++,b--; if (r) suf++,r--; if (y) suf++,y--; if (b) suf++,b--; if (pre==suf) { if (pre==0) ans=0; else if (pre==1) { ans+=1; ans+=(r+y+b)*2; } else if (pre==2) { ans=6; ans+=(r+y+b)*4; } else { ans=15; ans+=(r+y+b)*6; } } else { if (pre==3 && suf==2) { ans=10; ans+=(r+y+b)*5; } else if (pre==3 && suf==1) { ans=6; ans+=(r+y+b)*4; } else if (pre==3 && suf==0) { ans=3; ans+=(r+b+y)*3; } else if (pre==2 && suf==1) { ans=3; ans+=(r+y+b)*3; } else if (pre==2 && suf==0) { ans=1; ans+=(r+y+b)*2; } else if (pre==1 && suf==0) { ans=0; ans+=(r+y+b)*1; } } cout << ans << endl; } return 0; }