Cod sursa(job #1044581)

Utilizator ELHoriaHoria Cretescu ELHoria Data 30 noiembrie 2013 01:35:10
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <cstring>
#include <algorithm>

using namespace std;


int main() 
{
    ifstream cin("zebughil.in");
    ofstream cout("zebughil.out");
    unsigned N, G;
    static unsigned char dp[1 << 17];
    static unsigned int sum[1 << 17];
    unsigned int z[17];
    for (int t = 0;t < 3;t++) {
        cin >> N >> G;
        for (int i = 0;i < N;i++) {
            cin >> z[i];
            sum[ (1 << i)] = z[i];
        }
        
        for (int i = 1;i < (1 << N);i++) {
             sum[i] = sum[i ^ (i & -i)] + sum[i & -i] > G ? G + 1 : sum[i ^ (i & -i)] + sum[i & -i];
             if (sum[i] <= G) {
                dp[i] = 1;
             } else {
                dp[i] = static_cast<unsigned int>(N + 1);
                for (int j = i & (i - 1);j > 0;j = (j - 1) & i) {
                    dp[i] = dp[i] < dp[j] + dp[i ^ j] ? dp[i] : dp[j] + dp[i ^ j];
                }
             }
        }
        cout << dp[(1 << N) - 1] << "\n";
    }
    return 0;
}