對動態規劃(Dynamic Programming)的理解:從窮舉開始
阿新 • • 發佈:2019-01-27
int solve_by_brute_force(vector<int> &v, int cur, int limit, int sofar, int sum) {
if (cur == limit) { // the border of recursion
int other = sum - sofar;
return sofar>other? sofar-other : other-sofar;
}
// choose or not the current coin
int ans1 = solve_by_brute_force (v, cur+1, limit, sofar+v[cur], sum);
int ans2 = solve_by_brute_force(v, cur+1, limit, sofar, sum);
return ans1 < ans2? ans1 : ans2;
}
int main(){
int t;
cin >> t;
for (int nc= 0; nc<t; nc++) {
int m;
cin >> m;
vector<int> v(m);
int tot = 0;
for (int i= 0; i<m; i++) {
cin >> v[i];
tot += v[i];
}
int res = solve_by_brute_force(v, 0, m, 0, tot);
cout << res << endl;
}
return 0;
}