GCJ 2015-Qualification-B Infinite House of Pancakes 枚举,思路,误区 难度:3
生活随笔
收集整理的這篇文章主要介紹了
GCJ 2015-Qualification-B Infinite House of Pancakes 枚举,思路,误区 难度:3
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://code.google.com/codejam/contest/6224486/dashboard#s=p1
題目不難,教訓記終生
題目給了我們兩種操作:1 所有人都吃一個,簡記為消除操作 2 所有人不吃,把一個人的煎餅分給另一個人或者新來的人,簡記為分配
明顯,分配操作分給新來的人更有利,并且分配操作應該在消除操作之前
現在就是怎么分配的問題:
之前錯誤了兩次,因為誤認為直接對半分效率更高,但是對于 1 9這組數據,明顯是分成 1 3 3 3比分成1 4 5 更優
所以,枚舉分配操作之后的最大煎餅數i,然后分別計算把每個數量大于i的盤子里分到i所需多少次操作tmp.答案取最小的tmp+i即可
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=1e3+3; const int maxp=1e3+3; int n; int num[maxp];int main(){freopen("data.in","r",stdin);freopen("data.out","w",stdout);int T;scanf("%d",&T);for(int ti=1;ti<=T;ti++){scanf("%d",&n);memset(num,0,sizeof(num));int ans=0;for(int i=0;i<n;i++){int tmp;scanf("%d",&tmp);num[tmp]++;ans=max(tmp,ans);}int mx=ans;for(int i=1;i<=mx;i++){int tmp=0;for(int j=i+1;j<=mx;j++){tmp+=(j+i-1)/i*num[j]-num[j];}tmp+=i;ans=min(tmp,ans);}printf("Case #%d: %d\n",ti,ans);}return 0; }?
轉載于:https://www.cnblogs.com/xuesu/p/4419387.html
總結
以上是生活随笔為你收集整理的GCJ 2015-Qualification-B Infinite House of Pancakes 枚举,思路,误区 难度:3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菜根谭#302
- 下一篇: 嵌入式C语言之位运算 ..|.~.