题目:https://nanti.jisuanke.com/t/41401
思路:完全背包
#include<bits/stdc++.h> using namespace std; int main() { int n,m; int p[1005],w[1005],f[10005]; while(~scanf("%d%d",&n,&m)) { memset(f,0x3f,sizeof f); int res=0x3f3f3f3f; int maxw=0; for(int i=0;i<n;i++) scanf("%d%d",&p[i],&w[i]),f[w[i]]=min(f[w[i]],p[i]); for(int i=0;i<n;i++) for(int j=w[i];j<=10000;j++) { f[j]=min(f[j],f[j-w[i]]+p[i]); if(j>=m) { if(res>f[j]) res=f[j],maxw=j; else if(res==f[j]&&j>maxw) maxw=j; } } printf("%d %d\n",res,maxw); } return 0; }