Cod sursa(job #1389467)

Utilizator catalincraciunCraciun Catalin catalincraciun Data 16 martie 2015 11:58:32
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
/// Round 1A 2013 - Problem B - Codejam
#include <bits/stdc++.h>

#define inf (1<<30)+100

#define pb push_back
#define mp make_pair

using namespace std;

ifstream f("input.in");
ofstream g("output.out");

int e,r,n;
vector<int> act;
int maxim;

void read() {
    f>>e>>r>>n;
    act.resize(0);
    act.pb(0);
    for (int i=1;i<=n;i++) {
        int x; f>>x;
        act.pb(x);
    }
}

void goDP(int index, int energ, int sum) {
    if (index == n+1) {
        maxim = max(sum, maxim);
        return;
    }

    for (int i=1;i<=energ;i++)
        goDP(index+1, min(energ-i+r, e), sum + act[index]*i);
}

void solve() {
    maxim = -inf;
    goDP(0,e,0);
    g<<maxim;
}

int main() {

    int t; f>>t;
    int cs = 1;
    while (t--) {
        g<<"Case #"<<cs++<<": ";
        read();
        solve();
        g<<'\n';
    }

    f.close(); g.close();
    return 0;
}