P1926 小书童——刷题大军
#include<iostream>
#include<algorithm>
using namespace std;
int dp[200];
int a[20],b[20],c[20];
int n,m,k,r;
int main()
{
cin>>n>>m>>k>>r;
for (int i=1;i<=n;i++)
{
cin>>c[i];
}
for (int i=1;i<=m;i++)
{
cin>>a[i];
}
for (int i=1;i<=m;i++)
{
cin>>b[i];
}
for (int i=1;i<=m;i++)
{
for (int j=r;j>=a[i];j--)
{
dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
}
}
int t;
for (t=1;t<=r;t++)
{
if (dp[t]>=k) break;
}
sort(c+1,c+n+1);
r=r-t;
int ans=0;
for (int i=1;i<=n;i++)
{
if (r>=c[i]) {
r=r-c[i];
ans++;
}
else
{
break;
}
}
cout<<ans<<endl;
return 0;
}