1. 程式人生 > >對動態規劃(Dynamic Programming)的理解:從窮舉開始

對動態規劃(Dynamic Programming)的理解:從窮舉開始

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; }