01背包,没有任何变形,模板题。
#include#include #include #include #include #include using namespace std; // 01背包 最基础const int MAX = 1001;int N, V, T;int p[MAX];int w[MAX];int dp[MAX];void init(){ memset(dp, 0, sizeof dp);}int main(){ scanf("%d", &T); for (; T--;) { scanf("%d%d", &N, &V); init(); for (int i = 1; i <= N; i++) scanf("%d", &p[i]); for (int i = 1; i <= N; i++) scanf("%d", &w[i]); for (int i = 1; i <= N; i++) { for (int j = V; j >= w[i]; j--) // 01背包倒序 { dp[j] = max(dp[j], dp[j - w[i]] + p[i]); } } printf("%d\n", dp[V]); } return 0;}