範例程式碼 uva10690

//uva10690
#include <bits/stdc++.h>

using namespace std;
#define maxn 10101
int main() {
    int n, m;
    while(cin >> n >> m){
        int sum=0;
        vector<int> a(n+m);
        for(auto&e:a){
            cin>>e;
            sum+=e;
        }
        vector<bitset<maxn>> table(min(n, m)+1);
        table[0][0]=true;
        for(int i=0; i<a.size(); i++){
            for(int j=table.size()-2;j>=0;--j){
                table[j+1] |= table[j]<<(a[i]+50);
            }
        }
        int Min=INT_MAX, Max=INT_MIN;
        auto k = table.back();
        for(int i=0;i<maxn;++i){
            if(k[i]){
                int tmp = i-50*table.size()+50;
                int re = sum - tmp;
                Min = min(Min, tmp*re);
                Max = max(Max, tmp*re);
            }
        }
        cout << Max << " " << Min << endl;
    }
}