20分求大佬解答

P1478 陶陶摘苹果(升级版)

在线等,急
by estar_17k @ 2024-03-09 10:49:56


@[estar_17k](/user/724855) 两个问题: $1.$ 贪心排序很离谱,应该是用的力气越小越好,怎么到你这变成越大越好了,另外可以再优化一下,变成我这样: ```cpp bool cmp(Node u,Node v){ if(u.y==v.y) return u.x<v.x; return u.y<v.y; } ``` 可以排序一下椅子高度,这样到时候,可以直接 $break$ $2.$ 第二个问题应该是小失误,你看看你的 $sort$ , $sort(a,a+1,comp)?$ 应该是 $sort(a,a+shu,comp)$ 吧 你的代码修改后的 $AC$ 代码: ```cpp #include<iostream> #include<algorithm> using namespace std; struct pinguo { int m,n; }a[5005]; bool comp(pinguo a,pinguo b){ return a.n>b.n; } int main() { int shu,li,yizi,shou,x=0; cin>>shu>>li>>yizi>>shou; for(int i=0;i<shu;i++)cin>>a[i].m>>a[i].n; sort(a,a+1,comp); for(int i=0;i<shu;i++) if(li>=a[i].n && yizi+shou>=a[i].m){ x++; li-=a[i].n; } cout<<x; return 0; } ``` 我的代码(可以参考一下贪心优化,不过我用的都是格式化读入输出): ```cpp #include<bits/stdc++.h> using namespace std; int n,m,a,b,sum,ans; struct Node{ int x,y; }apple[5001]; bool cmp(Node u,Node v){ if(u.y==v.y) return u.x<v.x; return u.y<v.y; } int main() { scanf("%d%d%d%d",&n,&m,&a,&b); sum=a+b; for(int i=1;i<=n;i++) scanf("%d%d",&apple[i].x,&apple[i].y); sort(apple+1,apple+n+1,cmp); for(int i=1;i<=n;i++){ if(m>=apple[i].y){ if(sum>=apple[i].x){ ans++; m-=apple[i].y; } }else break; } printf("%d",ans); return 0;//qwq } ``` **~~蒟蒻求关注~~**
by __Rickysun__ @ 2024-03-09 11:16:01


@[estar_17k](/user/724855) 不对,你带代码修改后的 $AC$ 代码帖错了,应该是这个: ``` #include<iostream> #include<algorithm> using namespace std; struct pinguo { int m,n; }a[5005]; bool comp(pinguo a,pinguo b){ return a.n<b.n; } int main() { int shu,li,yizi,shou,x=0; cin>>shu>>li>>yizi>>shou; for(int i=0;i<shu;i++)cin>>a[i].m>>a[i].n; sort(a,a+shu,comp); for(int i=0;i<shu;i++) if(li>=a[i].n && yizi+shou>=a[i].m){ x++; li-=a[i].n; } cout<<x; return 0; } ``` ~~不小心把你的错误代码贴上去了~~
by __Rickysun__ @ 2024-03-09 11:17:22


@[Rickysun](/user/824205) 谢大佬,已关注!!!
by estar_17k @ 2024-03-09 17:39:43


|