日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ3122贪心或者二分(分蛋糕)

發布時間:2025/6/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ3122贪心或者二分(分蛋糕) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
? ? ? ?m+1個人來分n個蛋糕,每個人分到的蛋糕數必須一樣而且還必須是同一個蛋糕上的,問每個人最多分多少蛋糕?


思路:

? ? ?能想到的方法有兩種,一個是直接貪心,另一個就是二分,這個題目之前做過,用的是二分,但不知道為啥這次看到的時候,沒感覺。也沒去想二分,直接自己想了一個貪心的策略然后就AC了,先說貪心,貪心我們可以一個一個人的去分,每個人來的時候就在當前狀態中選擇一個蛋糕如果把它加到分這個蛋糕的人中后是加到所有別的蛋糕后每人得到最大的,感覺很別扭,說不清楚,直接看下面代碼把,其實很容易理解,然后在說說二分的解法,我沒去敲,以前用二分解過這個題目,就是枚舉答案,對于每一個枚舉的答案我們可以去算當前答案能得到的最多蛋糕數,就是相除取整然后相加,根據這個和來決定二分的走向,看討論說這個題目卡精度卡的很嚴格,我沒啥感覺,因為我的π用的是這個PI=acos(-1.0),所以沒被卡到。下面是貪心的代碼,二分的沒寫。


#include<math.h> #include<queue> #include<stdio.h> #include<string.h> #include<algorithm>using namespace std;typedef struct NODE {int p;double sum ,per;friend bool operator < (NODE a ,NODE b){return a.per < b.per;} }NODE;NODE node[11000]; NODE xin ,tou;int main () {int t ,n ,m ,i;double PI=acos(-1.0);double r;scanf("%d" ,&t);while(t--){scanf("%d %d" ,&n ,&m);priority_queue<NODE>q;for(i = 1 ;i <= n ;i ++){scanf("%lf" ,&r);node[i].per = node[i].sum = PI * r * r;node[i].p = 1;q.push(node[i]);}m ++;double Ans = 1000000000;while(m--){tou = q.top();q.pop();if(Ans > tou.per) Ans = tou.per;tou.p ++;tou.per = tou.sum / tou.p;q.push(tou);}printf("%.4lf\n",Ans);}return 0; }

總結

以上是生活随笔為你收集整理的POJ3122贪心或者二分(分蛋糕)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。