Cod sursa(job #2160529)

Utilizator Constantin.Dragancea Constantin Constantin. Data 11 martie 2018 13:12:52
Problema Cowfood Scor 16
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.05 kb
#include <bits/stdc++.h>
using namespace std;

int n, k, s, a[50], b[50], nr, nr2, csum;

void bktr(int q){
    if (q == k){
        nr++;
        return;
    }
    for (int i=1; i + csum <= s - (k - q - 1); i++) csum += i, bktr(q+1), csum -= i;
}

void bktr2(int q){
    if (csum == s || q == k){
        nr2++;
        return;
    }
    if (b[q+1] >= a[q+1])
        for (int i=0; csum + i<= s; i++) csum += i, bktr2(q+1), csum -= i;
    else
        for (int i=0; csum + i<= s && b[q+1] + i < a[q+1]; i++) csum += i, bktr2(q+1), csum -= i;
}

int main(){
    ifstream cin ("cowfood.in");
    ofstream cout ("cowfood.out");
    cin >> k >> s >> n;
    for (int i=1; i<=k; i++) a[i] = 1e5;
    bktr(0);
    for (int i=1; i<=n; i++){
        bool u = 0;
        csum = 0;
        for (int j=1; j<=k; j++){
            cin >> b[j];
            csum += b[j];
            if (b[j] < a[j]) u = 1;
        }
        if (u) bktr2(0);
        for (int j=1; j<=k; j++) a[j] = min(a[j], b[j]);
    }
    cout << nr - nr2;
    return 0;
}