Submission #473232

#TimeUsernameProblemLanguageResultExecution timeMemory
473232Ahmed_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 0; 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])+(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; }
#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...