제출 #1257895

#제출 시각아이디문제언어결과실행 시간메모리
1257895brover29Akcija (COCI21_akcija)C++17
90 / 110
1042 ms589824 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=2005;
#define f first
#define s second
const string br="617283";
struct cmp{
    bool operator()(const pair<ll,ll> &a,const pair<ll,ll> &b)const{
        if(a.f==b.f)return a.s<b.s;
        return a.f>b.f;
    }
};
multiset<pair<ll,ll>,cmp>dp[N][N];
ll n,k,a[N],d[N],p[N];
void upd(multiset<pair<ll,ll>,cmp> &a){

    while(a.size()>k){
        auto it=(--a.end());
        a.erase(it);
    }
}bool comp(ll a,ll b){
    return d[a]<d[b];
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin>>n>>k;
    for(ll i=1;i<=n;i++){
        cin>>a[i]>>d[i];
        p[i]=i;
    }
    sort(p+1,p+1+n,&comp);

    dp[0][0].insert({0,0});
    for(ll i=1;i<=n;i++){
        dp[i][0]=dp[i-1][0];
        for(ll j=1;j<=n;j++){
            dp[i][j]=dp[i-1][j];
            for(auto [cnt,w]:dp[i-1][j-1]){
                if(cnt+1>d[p[i]])continue;
                dp[i][j].insert({cnt+1,w+a[p[i]]});
            }
            upd(dp[i][j]);
        }
    }
    for(ll i=n;i>=0;i--){
        for(auto [cnt,w]:dp[n][i]){
            cout<<cnt<<' '<<w<<'\n';
            k--;
            if(!k)return 0;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...