不解释了,我估计难讲清楚,看代码吧。
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> using namespace std; int f[100005],d[100005]; int main() { int n,ww; while(scanf("%d%d",&n,&ww)!=EOF){ int i,j,k,v[101],mi[101],c[101][25],w[101][25]; memset(f,sizeof(f)); memset(d,sizeof(d)); for(i=1;i<=n;i++){ scanf("%d%d",&v[i],&mi[i]); for(j=1;j<=mi[i];j++){ scanf("%d%d",&c[i][j],&w[i][j]); } } for(i=1;i<=n;i++){ for(k=0;k<=ww-v[i];k++) f[k+v[i]]=d[k]; for(k=1;k<=mi[i];k++) for(j=ww;j>=v[i]+c[i][k];j--){ f[j]=max(f[j],f[j-c[i][k]]+w[i][k]); } for(k=v[i];k<=ww;k++) d[k]=max(f[k],d[k]); } printf("%d\n",d[ww]); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。