暴搜可过。
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,h[45],g[45],ans,f[45],s[45];
void dfs(int x,int p){
if(p>=k){
ans+=f[x];
return;
}
if(s[x]+p<k)return;
for(int i = x+1;i<=n;i++){
if(h[i]>=h[x])dfs(i,p+g[i]);
}
return;
}
signed main(){
cin >> n >> k;
for(int i = 1;i<=n;i++)cin >> h[i] >> g[i];
for(int i = n;i>=1;i--)s[i] = s[i+1]+g[i];
f[n] = 1;
for(int i = n-1;i>=1;i--){
f[i] = 1;
for(int j = i+1;j<=n;j++)if(h[i]<=h[j])f[i]+=f[j];
}
for(int i = 1;i<=n;i++)if(s[i]+g[i]>=k)dfs(i,g[i]);
cout << ans;
return 0;
}
hack 数据:
40 20
1 1
2 1
3 1
4 1
5 1
6 1
7 1
...
40 1
这组数据可以把上面的代码卡满。