Back to list of problems
Transportation
301.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int capacity, stations, orders; int start[22], end[22], pass[22]; int pas_stat[7]; void calculate(void) { int max_earning=0; int i,j,k; for(i=0; i< (1<<orders); i++) { int ok=1; int earning=0; for(j=0; j<stations; j++) { pas_stat[j]=0; } for(j=0; j<orders; j++) { if (i & (1<<j)) { for(k=start[j]; k<end[j]; k++) { pas_stat[k]+=pass[j]; if (pas_stat[k]>capacity) { ok=0; } } } } for(k=0; k<stations; k++) { earning += pas_stat[k]; } if (ok && (earning>max_earning)) { max_earning=earning; } } printf("%d\n", max_earning); } int main(int argc, char *argv[]) { char buf[1024]; int i; while(fgets(buf, 1024, stdin)) { if (sscanf(buf, "%d %d %d", &capacity, &stations, &orders)!=3) { exit(1); } if ((capacity==0) && (stations==0) && (orders==0)) { exit(0); } for(i=0; i<orders; i++) { if (!fgets(buf, 1024, stdin)) { exit(2); } if (sscanf(buf, "%d %d %d", &start[i], &end[i], &pass[i])!=3) { exit(3); } } calculate(); } exit(0); }