給定乙個有n個正整數的陣列a和乙個整數sum,求選擇陣列a中部分數字和為sum的方案數。
當兩種選取方案有乙個數字的下標不一樣,我們就認為是不同的組成方案。
1、採用動態規劃
f[i][j]的意義為從i個書中選取某些數使其和為j的方案的個數,
則f[i][j]=(j>=array[i])?(f[i-1][j-array[i]]+f[i-1][j]):(f[i-1][j])。
初始條件對於所有的i,f[i][0]=1,相當於從i個數中都不選取,此時和為零。注意如果有溢位的話,二維陣列定義需要為long long int 型別的。
**如下:
#include
#include
using namespace std;
int main()
long long int **f = new long long int *[n + 1];
for (int j = 0; j < n + 1; j++)
else}}
cout << f[n][sum] << endl;
}2、採用遞迴方法。注意一下遞迴的終止條件,但是這種方案的花費時間較動態規劃要多一些。
#include
#include
using namespace std;
vectorq;
int plan = 0;
void dfs(int num, int *array, int length)
if (num < 0 || length <= 0)
q.push_back(array[length - 1]);
dfs(num - array[length - 1], array, length - 1);
q.pop_back();
dfs(num, array, length - 1);
}int main()
dfs(sum, array, n);
cout << plan << endl;
}
N個數求和
n個數求和 本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入格式 輸入第一行給出乙個正整數n le 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定...
N個數求和
本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一定出現在分子前面。輸出上述數字...
N個數求和(20 分)
7 1 n個數求和 20 分 本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的符號一...