记住这一题

xiaoxiao2021-02-28  59

链接:https://www.nowcoder.com/acm/contest/112/B 来源:牛客网 题目描述 有n个队伍,每个队伍的人数小于等于5,每辆车最多坐5个人,要求一个队伍的人都在一辆车上,求最少的车数 输入描述: 第一行n 第二行n个数,表示每个队伍的人数 输出描述: 输出最少车数 示例1 输入 3 3 4 5 输出 3

做了一个晚上,签到题也没做出来,而且这道题好像在cf上做过的…手动黑脸 看别人的代码看到这一个比较简单的思路,觉得很不错,了解一下 用while来代替if(写了好多的if写到最后贼乱…),然后运用了贪心的思想?

代码:

#include <cstdio> #include <algorithm> using namespace std; const int MAXN=1e5+50; int a[6]; int main(void){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ int num; scanf("%d",&num); a[num]++; } int ans=0; ans+=a[5]; while(a[4]){ ans++; a[4]--; if(a[1]){ a[1]--; } } while(a[3]){ ans++; a[3]--; if(a[2]){ a[2]--; } else if(a[1]>=2){ a[1]-=2; } else{ a[1]=0; } } while(a[2]>=2){ ans++; a[2]-=2; if(a[1]){ a[1]--; } } while(a[2]){ ans++; a[2]=0; if(a[1]){ a[1]-=3; } } while(a[1]>0){ ans++; a[1]-=5; } printf("%d\n",ans); return 0; }
转载请注明原文地址: https://www.6miu.com/read-2000321.html

最新回复(0)