01背包(递归)

来源:互联网 发布:什么是网络平台 编辑:程序博客网 时间:2024/05/22 12:40
#include <iostream>#include <cstdio>using namespace std;const int maxn = 1000;int v[maxn];int w[maxn];int n = 0, W1= 0;int cou = 0;int m(int i, int j) {    cou++;    printf("m(%d, %d)\n", i, j);    if (i == n){        return 0;    }    if (w[i] > j) {        return m(i+1, j);    }    return max(m(i+1, j-w[i])+v[i], m(i+1, j));}int main() {    while (scanf("%d%d", &n, &W1)==2) {        for (int i = 0; i < n; i++) {            scanf("%d", &v[i]);        }        for (int i = 0; i < n; i++) {            scanf("%d", &w[i]);        }        int maxval = m(0, W1);        printf("%d\n", maxval);        printf("cou = %d\n", cou);    }    return 0;}