每种物品可取无限多个
#include <bits/stdc++.h>
using namespace std;
long long f[10010];
int v[10010],w[10010];
int main()
{
int t;
cin>>t;
while(t--){
memset(f,0,sizeof(f));//多组测试样例记得重置 f数组
v[1]=w[1]=150;
v[2]=w[2]=200;
v[3]=w[3]=350;
int N;
cin>>N;
for (int i = 1; i <= 3; i ++ )
for (int j = v[i]; j <= N; j ++ )
f[j] = max(f[j], f[j - v[i]] + w[i]);
cout << N-f[N] << endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N=10010;
int V;
int v[N],w[N];
long long dp[N];
int main(){
int n;
cin>>n>>V;
for(int i=0;i<n;i++){
cin>>v[i]>>w[i];
}
for(int i=0;i<n;i++){
for(int j=v[i];j<=V;j++){
dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
}
}
cout<<dp[V]<<endl;
return 0;
}