P1926 小书童——刷题大军 题解

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;
}

  

posted @ 2022-03-21 08:25  心悟&&星际  阅读(33)  评论(0编辑  收藏  举报