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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

HUNAN 11560 Yangyang loves AC(二分+贪心)

發布時間:2023/11/30 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HUNAN 11560 Yangyang loves AC(二分+贪心) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11560&courseid=0

題意:總共有n天,每天yangyang都需要一個快樂值,有m個隊友,每個隊友都會給陽陽一個快樂值(為2的冪),并且只能給一次,如果某一天隊友給的快樂值達到yangyang需要的快樂值那么這一天yangyang就是快樂的,統計最多快樂的天數。

思路:因為達到快樂的天數不要求連續,那么只要對需要的快樂值和隊友給的快樂值分別排序,然后每次二分出一個快樂的天數x,判斷能不能用m個數去滿足它,所以把0到x的數加入優先隊列,然后從m開始從大到小去覆蓋優先隊列的值.

1 #include<cstdio> 2 #include<queue> 3 #include<algorithm> 4 using namespace std; 5 6 int n,m,h[20010],p[20010]; 7 8 bool ok(int x) 9 { 10 priority_queue<int>que; 11 for(int i=0;i<x;i++) 12 que.push(h[i]); 13 int y=m; 14 while(!que.empty()) 15 { 16 y--; 17 if(y<0) break; 18 if(p[y]<que.top()) que.push(que.top()-p[y]); 19 que.pop(); 20 } 21 return que.empty(); 22 } 23 void solve() 24 { 25 int lb=0,ub=n; 26 int cnt=0; 27 while(lb<=ub) 28 { 29 int mid=(lb+ub)>>1; 30 if(ok(mid)) 31 { 32 lb=mid+1; 33 cnt=max(cnt,mid); 34 // printf("%d %d\n",cnt,lb); 35 } 36 else ub=mid-1; 37 } 38 printf("%d\n",cnt); 39 } 40 int main() 41 { 42 //freopen("a.txt","r",stdin); 43 while(~scanf("%d%d",&n,&m)) 44 { 45 for(int i=0;i<n;i++) scanf("%d",&h[i]); 46 for(int i=0;i<m;i++) scanf("%d",&p[i]); 47 sort(h,h+n); 48 sort(p,p+m); 49 solve(); 50 } 51 return 0; 52 }

?

轉載于:https://www.cnblogs.com/nowandforever/p/4728290.html

總結

以上是生活随笔為你收集整理的HUNAN 11560 Yangyang loves AC(二分+贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。

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