不滚动
#include <bits/stdc++.h>
using namespace std;
int n,m,t,w[105],v[105],a[105][205][205];
int main(){
cin>>n>>m>>t;
for(int i=1;i<=n;i++)cin>>w[i]>>v[i];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=1;k<=t;k++){
if(w[i]>j||v[i]>t)a[i][j][k]=a[i-1][j][k];
else a[i][j][k]=max(a[i-1][j][k],a[i-1][j-w[i]][k-v[i]]+1);
}
cout<<a[n][m][t];
return 0;
}
滚动
#include <bits/stdc++.h>
using namespace std;
int n,m,t,w[105],v[105],a[205][205];
int main(){
cin>>n>>m>>t;
for(int i=1;i<=n;i++)cin>>w[i]>>v[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=w[i];j--)
for(int k=t;k>=v[i];k--)
a[j][k]=max(a[j][k],a[j-w[i]][k-v[i]]+1);
cout<<a[m][t];
return 0;
}