Pagini recente » Cod sursa (job #484376) | Cod sursa (job #2844169) | Cod sursa (job #2033217) | Cod sursa (job #1666758) | Cod sursa (job #2160529)
#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;
}