END_TURN enter_bank(PLAYER *player) { END_TURN end_turn = YES; display_player_profile(player); display_bank_actions_menu(); char choice = '\0'; char *valid_choices = VALID_BANK_ACTIONS; while (!strpbrk(valid_choices, &choice)) { choice = getchar(); choice = toupper(choice); } switch (choice) { case 'L': end_turn = take_out_loan(player); break; case 'P': end_turn = pay_bank(player); break; case 'I': end_turn = invest(player); break; case 'W': end_turn = withdraw_investment(player); break; case 'M': end_turn = NO; break; } return end_turn; }
int invest(int rest, int num) { if(rest == 0 || num == m) return 0; int &ret = d[rest][num]; if(ret != -1) return ret; ret = invest(rest, num+1); for(int i=1; i<=rest; i++) { int tmp = invest(rest-i, num+1)+benefit[i][num]; if(ret < tmp) { ret = tmp; result[rest][num] = i; } } return ret; }
int main() { scanf("%d%d", &n, &m); for(int i=0; i<n; i++) { int cost; scanf("%d", &cost); for(int j=0; j<m; j++) scanf("%d", &benefit[cost][j]); } memset(d, -1, sizeof(d)); printf("%d\n", invest(n, 0)); trace(n, 0); return 0; }