/* * pak.c * br-fo */ #include <stdio.h> #include <stdlib.h> int nprz, mpl; int increase(int *liczba) { int i = nprz - 1; while (liczba[i] == mpl - 1) { liczba[i] = 0; i--; if (i < 0) return 0; } liczba[i]++; return 1; } int main() { int nonzero, min_nonzero, i, *ma, *uc, *liczbabf, *suma; scanf("%i %i", &nprz, &mpl); ma = (int *) malloc(nprz * sizeof(int)); liczbabf = (int *) malloc(nprz * sizeof(int)); uc = (int *) malloc(mpl * sizeof(int)); suma = (int *) malloc(mpl * sizeof(int)); for (i = 0; i < nprz; i++) scanf("%i", &ma[i]); for (i = 0; i < mpl; i++) scanf("%i", &uc[i]); for (i = 0; i < nprz; i++) { liczbabf[i] = 0; } min_nonzero = mpl + 1; for (;;) { for (i = 0; i < mpl; i++) suma[i] = 0; for (i = 0; i < nprz; i++) suma[liczbabf[i]] += ma[i]; nonzero = 0; for (i = 0; i < mpl; i++) { if (suma[i] > uc[i]) break; if (suma[i]) nonzero++; } if (i==mpl && nonzero < min_nonzero) min_nonzero = nonzero; if (!increase(liczbabf)) break; } if (min_nonzero == mpl + 1) printf("NIE\n"); else printf("%i\n",min_nonzero); free(ma); free(liczbabf); free(uc); free(suma); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | /* * pak.c * br-fo */ #include <stdio.h> #include <stdlib.h> int nprz, mpl; int increase(int *liczba) { int i = nprz - 1; while (liczba[i] == mpl - 1) { liczba[i] = 0; i--; if (i < 0) return 0; } liczba[i]++; return 1; } int main() { int nonzero, min_nonzero, i, *ma, *uc, *liczbabf, *suma; scanf("%i %i", &nprz, &mpl); ma = (int *) malloc(nprz * sizeof(int)); liczbabf = (int *) malloc(nprz * sizeof(int)); uc = (int *) malloc(mpl * sizeof(int)); suma = (int *) malloc(mpl * sizeof(int)); for (i = 0; i < nprz; i++) scanf("%i", &ma[i]); for (i = 0; i < mpl; i++) scanf("%i", &uc[i]); for (i = 0; i < nprz; i++) { liczbabf[i] = 0; } min_nonzero = mpl + 1; for (;;) { for (i = 0; i < mpl; i++) suma[i] = 0; for (i = 0; i < nprz; i++) suma[liczbabf[i]] += ma[i]; nonzero = 0; for (i = 0; i < mpl; i++) { if (suma[i] > uc[i]) break; if (suma[i]) nonzero++; } if (i==mpl && nonzero < min_nonzero) min_nonzero = nonzero; if (!increase(liczbabf)) break; } if (min_nonzero == mpl + 1) printf("NIE\n"); else printf("%i\n",min_nonzero); free(ma); free(liczbabf); free(uc); free(suma); return 0; } |