#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<math.h>
#include<algorithm>
#include<iomanip>
using namespace std;
int n,m,k,r;
int que[11];
int dp[51];
int pos;
struct def{
int time,value;
};
def hw[11];
void get_data(){
cin>>n>>m>>k>>r;
for(int i=1;i<=n;i++){
cin>>que[i];
}
for(int i=1;i<=m;i++){
cin>>hw[i].time ;
// cout<<hw[i].time<<" ";
}
// cout<<endl;
for(int i=1;i<=m;i++){
cin>>hw[i].value;
// cout<<hw[i].value<<" ";
}
}
void do_dp(){// 得到及格条件下剩余最多的时间
memset(dp,0,sizeof(dp));
// for(int i=1;i<=r;i++)cout<<dp[i]<<" ";
for(int i=1;i<=m;i++){
for(int j=r;j>=hw[i].time;j--){
dp[j]=max(dp[j],dp[j-hw[i].time]+hw[i].value);
// if(i==1&&dp[j]!=5)cout<<endl<<dp[j]<<" "<<dp[j-hw[i].time ]<<endl;
}
}
pos=0;
while(dp[pos]<k)pos++;
}
void check_que(){
cout<<endl<<endl;
for(int i=1;i<=n;i++)cout<<que[i]<<" ";
cout<<endl<<endl;
}
void get_and_give_out_ans(){
int a=r-pos;
// cout<<r<<" "<<a<<endl;
// check_que();
sort(que+1,que+n+1);
// check_que();
int ans=0;
int i=1;
while((a-que[i])>0){
a-=que[i];
i++;
ans++;
}
cout<< ans;
}
void check_dp(){
cout<<endl<<endl;
for(int i=1;i<=r;i++)cout<<dp[i]<<" ";
cout<<endl<<endl;
}
int main(){
get_data();
do_dp();
// check_dp();
get_and_give_out_ans();
return 0;
}
当我输出中间过程(dp初始值)发现就算保险起见memset清零了,里面还有数据!而且是先前往结构体数组hw里输入的那几组数据!怎么回事呀qwq 编完后一直找问题,最后对照答案也没有任何算法上的问题,一样的思路做法呀,救救sos