有一个大水桶,能盛放的水总容积为V,设有N个小桶的水,其容积分别为w1,w2,…,wn,希望从N个小桶中选择若干桶水倒入大桶中,所选水的体积之和刚好能盛满大桶,即水的体积之和等于V。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| #include <iiostream> using namespace std;
const int N = 10; int W[N] = {0}; int V[N] = {0};
bool Func(int v, int i);
void OutPut();
void InitW();
void InitV(); int main() { InitV(); InitW(); Func(20, 0); system("pause"); return 0; } bool Func(int vt, int i) { if (i == N) { return false; } else { for (int vi = i; vi < N; ++vi) { if (vt == V[vi]) { W[vi] = 1; OutPut(); W[vi] = 0; return true; } else if (vt > V[vi]) { W[vi] = 1; Func(vt-V[vi], vi + 1); W[vi] = 0; } } return false; } } void OutPut() { for (int i = 0; i < N; ++i) { if (1 == W[i]) { cout << i+1 << " "; } } cout << endl; } void InitW() { for (int i = 0; i < N; ++i) { W[i] = 0; } } void InitV() { for (int i = 0; i < N; ++i) { V[i] = i + 1; } }
|