```cpp
z=i+1;
```
应该是
```cpp
z=i-1;
```
可能就好了
by CGDGAD @ 2020-10-19 19:53:50
~~然而似乎并没有~~
而且
这里z已经小于应该求的真实值,z=i-1不就更小了???
by flash_starr @ 2020-10-19 19:58:03
```c
#include <bits/stdc++.h>
using namespace std;
int n,m,k,r,ans,w1[10005],w2[10005],val[10005],dp1[100005],dp2[100005];
int main()
{
cin>>n>>m>>k>>r;
for(int i=1;i<=n;i++)
{
cin>>w2[i];
}
for(int i=1;i<=m;i++)
{
cin>>w1[i]>>val[i];
}
for(int i=1;i<=m;i++)
{
for(int j=r;j>=w1[i];j--)
{
dp1[j]=max(dp1[j],dp1[j-w1[i]]+val[i]);
}
}
for(int i=0;i<=r;i++)
{
if(dp1[i]>=k)
{
ans=r-i;
break;
}
}
for(int i=1;i<=n;i++)
{
for(int j=ans;j<=r;j++)
{
dp2[j]=max(dp2[j],dp2[j-w2[i]]+1);
}
}
cout<<dp2[r]<<endl;
return 0;
}
```
by RicardoLu @ 2021-07-21 19:29:31