社区讨论

反悔贪心求条,码风不劣但思路混乱

P3045[USACO12FEB] Cow Coupons G参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mlhgp2y7
此快照首次捕获于
2026/02/11 11:20
4 周前
此快照最后确认于
2026/02/11 13:35
4 周前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
/*
K老师,早上好
PLS,早上好
L老师,早上好
KKK老师,早上好
*/
int chazhi[50004];
struct node{
    int num,id;
    bool operator<(const node &t)const{
        return chazhi[id]>chazhi[t.id];
    }
}cow[50004];
bool cmp(node a,node b){
    return a.num>b.num;
}
priority_queue<node> q,q1;
int main(){
    int n,k,m;
    cin>>n>>k>>m;
    for(int i=1;i<=n;i++){
        cin>>cow[i].num>>chazhi[i];
        cow[i].id=i;
        cow[i].num-=chazhi[i];
    }
    sort(cow+1,cow+1+n,cmp);
    int now=0,ans=0;
    q.push((node){0,0});
    for(int i=1;i<=n;i++){
        if(q.size()<k)
            if(now+cow[i].num<m&&k-q.size()>1||now+cow[i].num+min(chazhi[q.top().id],chazhi[cow[i].id])<m&&k-q.size()<=1){
                now+=cow[i].num;
                q.push(cow[i]);
                ans++;
            }
            else if(now+cow[i].num==m){
                cout<<ans;
                return 0;
            }
        else{
            if(cow[i].num+chazhi[q.top().id]+now<=m){
                now+=chazhi[q.top().id];
                now+=cow[i].num;
                q.pop();
                q.push(cow[i]);
                ans++;
            }
            else{
                cout<<ans;
                return 0;            
            }

        }
    }
    cout<<ans;
    
}

回复

1 条回复,欢迎继续交流。

正在加载回复...