网站要怎么建立,一个专门做酒店招聘的网站,做维修注册网站,北京知名的品牌设计公司http://acm.hunnu.edu.cn/online/?actionproblemtypeshowid11560courseid0 题意#xff1a;总共有n天,每天yangyang都需要一个快乐值,有m个队友,每个队友都会给阳阳一个快乐值(为2的幂),并且只能给一次,如果某一天队友给的快乐值达到yangyang需要的快乐值那么…http://acm.hunnu.edu.cn/online/?actionproblemtypeshowid11560courseid0 题意总共有n天,每天yangyang都需要一个快乐值,有m个队友,每个队友都会给阳阳一个快乐值(为2的幂),并且只能给一次,如果某一天队友给的快乐值达到yangyang需要的快乐值那么这一天yangyang就是快乐的,统计最多快乐的天数。 思路因为达到快乐的天数不要求连续,那么只要对需要的快乐值和队友给的快乐值分别排序,然后每次二分出一个快乐的天数x,判断能不能用m个数去满足它,所以把0到x的数加入优先队列,然后从m开始从大到小去覆盖优先队列的值. 1 #includecstdio2 #includequeue3 #includealgorithm4 using namespace std;5 6 int n,m,h[20010],p[20010];7 8 bool ok(int x)9 {
10 priority_queueintque;
11 for(int i0;ix;i)
12 que.push(h[i]);
13 int ym;
14 while(!que.empty())
15 {
16 y--;
17 if(y0) 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 lb0,ubn;
26 int cnt0;
27 while(lbub)
28 {
29 int mid(lbub)1;
30 if(ok(mid))
31 {
32 lbmid1;
33 cntmax(cnt,mid);
34 // printf(%d %d\n,cnt,lb);
35 }
36 else ubmid-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 i0;in;i) scanf(%d,h[i]);
46 for(int i0;im;i) scanf(%d,p[i]);
47 sort(h,hn);
48 sort(p,pm);
49 solve();
50 }
51 return 0;
52 } 转载于:https://www.cnblogs.com/nowandforever/p/4728290.html