답안 #473235

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
473235 2021-09-15T10:44:20 Z Ahmed_Solyman San (COCI17_san) C++14
72 / 120
64 ms 304 KB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

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

ll solve(ll i,ll prev,ll sum){
    if(i==n)return 0;
    ll &ret=dp[i][prev];
    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])+(sum+b[i]>=k);
    }
    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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 64 ms 204 KB Output is correct
2 Correct 18 ms 304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -