CodeForces B. Taxi 贪心

CodeForces B. Taxi 贪心_第1张图片

 

题目大意:

1/2/3/4分组,一辆出租车最多乘坐4人,问最少需要几辆车。

思路:

一、数学解法

4单独需要一辆

3和1尽可能多的搭配

两个1 和 一个 2 搭配

两个2 自行搭配

四个1 自行搭配

AC代码:

#include 
#include 
#include 
using namespace std;
 
 
int main(){
    int n;
    int x;
    cin>>n;
    int ans = 0;
    int num1=0,num2=0,num3=0;
    while(n--){
    	cin>>x;
    	if (x==1) {
    		num1++;
    	}
    	if (x==2) {
    		num2++;
    	}
    	if (x==3) {
    		num3++;
    	}
    	if (x==4) {
    		ans++;
    	}
    }
    if (num3 >= num1) {
    	ans += num3;
    	ans += ((num2+1)/2);
    }
    if (num30) {
    				ans += (num1-1)/4+1;
    			}
    			if (num1==0) {
    				
    			}
    		}
    	}
 
    cout << ans << endl;
    return 0;
}

二、贪心模拟:

#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn = 1e5 + 5;
int n = 0, tmp = 0;
int a[maxn];
long long ans = 0;
bool cmp(int c, int b) {
    return c > b;
}
int main() {
    cin >> n;

    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }

    sort(a, a + n, cmp);
    for(int i = 0; i < n; i++) {
        tmp = (a[i] + a[n - 1]);
        if(tmp <= 4) {
            ans++;
            n--;
            while(tmp + a[n - 1] <= 4) {
                tmp += a[n - 1];
                n--;
            }
        }
        else ans++;
    }
    cout << ans << endl;
    return 0;
}

 

你可能感兴趣的:(CodeForces,算法,贪心算法,C++,codeforces,ACM)