动态规划1-集合加法(算法基础 第4周)

问题描述:
动态规划1-集合加法(算法基础 第4周)_第1张图片

分析:
1. 原题出处POJ:http://cxsjsxmooc.openjudge.cn/hdxw12/A/
2. 使用双循环会超时,数组又派上了用场
源码:

#include <iostream>
#include <vector>
using namespace std;

int fun(const vector<int>& a, const vector<int>& b, const int sum) {
    int res=0;
    for (int i=0; i<a.size(); i++) {
        if (a.at(i)>0) {
            if (sum >= i) {
                res += a.at(i) * b.at(sum-i);
            }   
        }           
    }
    return res;
}

int main() {
    int n;
    cin >> n;
    int sum=0;
    int a=0, b=0;
    int temp_a=0, temp_b=0; 
    while(n--) {
        vector<int> vector_a(10001, 0), vector_b(10001, 0);
        cin >> sum;
        cin >> a;
        for(int i=0; i<a; i++) {
            cin >> temp_a;
            vector_a.at(temp_a)++;
        }
        cin >> b;
        for(int i=0; i<b; i++) {
            cin >> temp_b;
            vector_b.at(temp_b)++;
        }
        cout << fun(vector_a, vector_b, sum) << endl;
    }
    return 1;
}

你可能感兴趣的:(动态规划)