新手守护
大佬你们好(我才学到队列,最近刷刷以前题目)!!!
2973 切pizza
题目描述 Description
到了发工资的日子,小明为了奖励自己一个月以来的辛苦工作,于是今天买了n块pizza,但是准备吃的时候同组的同事过来了,他答应给每个人留一口,然后量了量每个人口的大小。小明有把刀,可以切pizza,但他不能把两块pizza拼起来,但是他又不会给任何人两块pizza。现在问你,小明怎样切pizza,才能满足最多的人。(小明的刀很强,切的时候不会浪费pizza)。
输入描述 Input Description
第一行n,小明有n个pizza。接下来n行,每行表示一个pizza的大小。再一行一个数m,为同事的人数,然后m行,每行一个数,为一个人嘴的大小。(1<=n<=50, 1<=m<=1024)
输出描述 Output Description
一行,小明最多可以填多少张嘴巴。
样例输入 Sample Input
4
30
40
50
25
10
15
16
17
18
19
20
21
25
24
30
样例输出 Sample Output
7
数据范围及提示 Data Size & Hint
蛋糕大小和嘴巴大小均<=10000
本人不会以下是错误代码
#include<iostream> #include<algorithm> using namespace std; bool cmp(int a,int b) { return a>b; } int a[10010],b[10010],num; int main() { int n,m,j=1; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } cin>>m; for(int i=1;i<=m;i++) { cin>>b[i]; } sort(a+1,a+n+1,cmp); sort(b+1,b+m+1); for(int i=1;i<=n;i++) { while(a[i]>=b[j]) { a[i]-=b[j]; num++; j++; } } cout<<num<<endl; return 0; }
只得20分
高级天翼
@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!@舒航!!!!!
@舒航!!!!!@舒航!!!!!
里面有答案!!!!
高级天翼
高级天翼
初级光能
- cin>>n;
- for(int i=1;i<=n;++i)
- {
- scanf("%d",&cake[i]);
- tot+=cake[i];
- }
- cin>>m;
- for(int i=1;i<=m;++i)
- {
- scanf("%d",&mouth[i]);
- }
- qsort(cake+1,n,sizeof(int),cmp);
- qsort(mouth+1,m,sizeof(int),cmp);
- sum[0]=0;
- for(int i=1;i<=m;++i)sum[i]=sum[i-1]+mouth[i];
- while(sum[m]>tot)--m;
- int l=0,r=m;
- while(l<=r)
- {
- mid=l+r>>1;
- for(int i=1;i<=n;++i)fcake[i]=cake[i];
- space=0;
- if(dfs(mid,1))l=mid+1;
- else r=mid-1;
- }
- cout<<l-1;
- puts("");
- 这是主函数
- int cmp(const void *a, const void *b)
- {
- return(*(int *)a-*(int *)b);
- }
- bool dfs(int deep,int pos)
- {
- if(deep<=0)return 1;
- if(tot-space<sum[mid])return 0;
- for(int i=pos;i<=n;++i)
- {
- if(fcake[i]>=mouth[deep])
- {
- fcake[i]-=mouth[deep];
- if(fcake[i]<mouth[1]) space+=fcake[i];
- if(mouth[deep]==mouth[deep-1])
- {
- if(dfs(deep-1,i)) return 1;
- }
- else if(dfs(deep-1,1)) return 1;
- if(fcake[i]<mouth[1]) space-=fcake[i];
- fcake[i]+=mouth[deep];
- }
- }
- return 0;
- }
- 其他函数
- 定义自己写
初级光能
@酷町喵~o( =∩ω∩= )o~ 求求您,帮我把47780个刷赞清除,把刷赞者揪出来!