标签:
原题链接:点击此处
思路:01背包问题,还没太懂,拿着公式用,结果过了,放这里,以后再琢磨。
源代码:
#include <iostream> #include <stdio.h> #include <vector> #include <algorithm> using namespace std; int main() { int num,n,m; scanf("%d",&num); while(num--) { scanf("%d %d",&n,&m); vector < int > w(n+1,0),v(n+1,0),c(m+1,0); vector< vector < int > >d(n+2,c); for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1;i<=n;i++) scanf("%d",&v[i]); for(int i=n;i>=1;i--) { for(int j=0;j<=m;j++) { d[i][j]=d[i+1][j]; if(j>=v[i]) { if( d[i][j] < d[i+1][j-v[i]]+ w[i] ) d[i][j] = d[i+1][j-v[i]]+ w[i] ; } } } printf("%d\n",d[1][m]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/gdvxfgv/p/5744282.html