제출 #473230

#제출 시각아이디문제언어결과실행 시간메모리
473230Ahmed_SolymanSan (COCI17_san)C++14
0 / 120
36 ms65540 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll n,k;
ll dp[45][45][10000];
vector<ll>a(45),b(45);

ll solve(ll i,ll prev,ll sum){
    if(i==n)return (sum>=k);
    ll &ret=dp[i][prev][sum];
    if(~ret)return ret;
    ll Take=0;
    ll notTake=solve(i+1,prev,sum);
    if(a[i]>=a[prev]){
        Take=solve(i+1,i,sum+b[i]);
    }
    return ret=Take+notTake;
}
int main()
{
    memset(dp,-1,sizeof(dp));
    cin>>n>>k;
    for(ll i=0;i<n;i++)cin>>a[i]>>b[i];
    if(n<=20){
        ll ans=0;
        for(ll mask=0;mask<(1<<n);mask++){
            ll sum=0,prev=44;
            for(ll i=0;i<n;i++){
                if((1<<i)&mask){
                    if(a[i]>=a[prev]){
                        sum+=b[i];
                    }
                    else{
                        sum=-1;
                        break;
                    }
                    prev=i;
                }
            }
            if(sum>=k)ans++;
        }
        cout<<ans<<endl;
    }
    else{
        cout<<solve(0,44,0)<<endl;
    }
    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...