for (i = 0; i < n; i++)
scanf("%s %d %d", &hw[i].name, &hw[i].deadline, &hw[i].time);
max = 1 << n;
for (s = 1; s < max; s++) {
dp[s].score = INF;
for (i = n - 1; i >= 0; i--) {
recent = 1 << i;
if (s & recent) {
past = s - recent;
reduce = dp[past].time + hw[i].time - hw[i].deadline;
if (reduce < 0)
reduce = 0;
if (reduce + dp[past].score < dp[s].score) {
dp[s].score = dp[past].score + reduce;
dp[s].now = i;
dp[s].pre = past;
dp[s].time = dp[past].time + hw[i].time;
}
}
}
}
printf("%d\n", dp[max - 1].score);
print(max-1);
}
return 0;
}
