#include <stdlib.h>
#include <stdio.h>
#include <string.h>
static const int values[] = { 1, 5, 10, 50, 100, 500, 1000, 2000, 5000, 10000 };
#define values_num (sizeof(values) / sizeof(*values))
int main_part11_281(int argc, char *argv[]) {
int ary[values_num] = {0};
int i, j;
int total, remain, value, value2, cnt, max_cnt, change, check_total;
remain = total;
max_cnt = 0;
change = 0;
for (i = values_num - 1; i > -1; i--) {
value = values[i];
cnt = remain / value;
remain -= value * cnt;
ary[i] = cnt;
if (max_cnt < cnt) max_cnt = cnt;
if (cnt > 0) change++;
}
while (change > 0) {
change = 0;
for (i = values_num - 1; i > -1; i--) {
value = values[i];
if (ary[i] > 0 && max_cnt == ary[i]) {
for (j = values_num - 1; j > -1; j--) {
value2 = values[j];
if (i < j) {
if (((value2 % value) == 0) && ((ary[i] - (value2 / value)) >= (ary[j] + 1))) {
ary[i] -= value2 / value;
ary[j] += 1;
change++;
}
} else if (i > j) {
if (((value % value2) == 0) && ((ary[i] - 1) >= (ary[j] + (value / value2)))) {
ary[i] -= 1;
ary[j] += value / value2;
change++;
}
}
}
}
}
if (change > 0) {
max_cnt = 0;
check_total = 0;
for (i = 0; i < values_num; i++) {
value = values[i];
cnt = ary[i];
check_total += value * cnt;
if (max_cnt < cnt) max_cnt = cnt;
}
if (check_total != total) {
printf("ERROR: total=%d but check_total=%d\n", total
, check_total
); }
}
}
printf("Y=%d\n=>%d\n", total
, max_cnt
); }
int main(int argc, char *argv[]) {
char *argv1[] = {"", "500"};
char *argv2[] = {"", "300"};
char *argv3[] = {"", "40"};
char *argv4[] = {"", "60"};
if (argc <= 1) {
main_part11_281(sizeof(argv1) / sizeof(char*), argv1);
main_part11_281(sizeof(argv2) / sizeof(char*), argv2);
main_part11_281(sizeof(argv3) / sizeof(char*), argv3);
main_part11_281(sizeof(argv4) / sizeof(char*), argv4);
} else {
main_part11_281(argc, argv);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgpzdGF0aWMgY29uc3QgaW50IHZhbHVlc1tdID0geyAxLCA1LCAxMCwgNTAsIDEwMCwgNTAwLCAxMDAwLCAyMDAwLCA1MDAwLCAxMDAwMCB9OwojZGVmaW5lIHZhbHVlc19udW0gKHNpemVvZih2YWx1ZXMpIC8gc2l6ZW9mKCp2YWx1ZXMpKQppbnQgbWFpbl9wYXJ0MTFfMjgxKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIGludCBhcnlbdmFsdWVzX251bV0gPSB7MH07CiAgICBpbnQgaSwgajsKICAgIGludCB0b3RhbCwgcmVtYWluLCB2YWx1ZSwgdmFsdWUyLCBjbnQsIG1heF9jbnQsIGNoYW5nZSwgY2hlY2tfdG90YWw7CiAgICB0b3RhbCA9IGF0b2koYXJndlsxXSk7CiAgICByZW1haW4gPSB0b3RhbDsKICAgIG1heF9jbnQgPSAwOwogICAgY2hhbmdlID0gMDsKICAgIGZvciAoaSA9IHZhbHVlc19udW0gLSAxOyBpID4gLTE7IGktLSkgewogICAgICAgIHZhbHVlID0gdmFsdWVzW2ldOwogICAgICAgIGNudCA9IHJlbWFpbiAvIHZhbHVlOwogICAgICAgIHJlbWFpbiAtPSB2YWx1ZSAqIGNudDsKICAgICAgICBhcnlbaV0gPSBjbnQ7CiAgICAgICAgaWYgKG1heF9jbnQgPCBjbnQpIG1heF9jbnQgPSBjbnQ7CiAgICAgICAgaWYgKGNudCA+IDApIGNoYW5nZSsrOwogICAgfQogICAgd2hpbGUgKGNoYW5nZSA+IDApIHsKICAgICAgICBjaGFuZ2UgPSAwOwogICAgICAgIGZvciAoaSA9IHZhbHVlc19udW0gLSAxOyBpID4gLTE7IGktLSkgewogICAgICAgICAgICB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgICAgICAgaWYgKGFyeVtpXSA+IDAgJiYgbWF4X2NudCA9PSBhcnlbaV0pIHsKICAgICAgICAgICAgICAgIGZvciAoaiA9IHZhbHVlc19udW0gLSAxOyBqID4gLTE7IGotLSkgewogICAgICAgICAgICAgICAgICAgIHZhbHVlMiA9IHZhbHVlc1tqXTsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGopIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodmFsdWUyICUgdmFsdWUpID09IDApICYmICgoYXJ5W2ldIC0gKHZhbHVlMiAvIHZhbHVlKSkgPj0gKGFyeVtqXSArIDEpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJ5W2ldIC09IHZhbHVlMiAvIHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJ5W2pdICs9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IGopIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodmFsdWUgJSB2YWx1ZTIpID09IDApICYmICgoYXJ5W2ldIC0gMSkgPj0gKGFyeVtqXSArICh2YWx1ZSAvIHZhbHVlMikpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJ5W2ldIC09IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnlbal0gKz0gdmFsdWUgLyB2YWx1ZTI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY2hhbmdlID4gMCkgewogICAgICAgICAgICBtYXhfY250ID0gMDsKICAgICAgICAgICAgY2hlY2tfdG90YWwgPSAwOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzX251bTsgaSsrKSB7CiAgICAgICAgCSAgICB2YWx1ZSA9IHZhbHVlc1tpXTsKICAgICAgICAgICAgICAgIGNudCA9IGFyeVtpXTsKICAgICAgICAgICAgICAgIGNoZWNrX3RvdGFsICs9IHZhbHVlICogY250OwogICAgICAgICAgICAgICAgaWYgKG1heF9jbnQgPCBjbnQpIG1heF9jbnQgPSBjbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoZWNrX3RvdGFsICE9IHRvdGFsKSB7CiAgICAgICAgICAgICAgICBwcmludGYoIkVSUk9SOiB0b3RhbD0lZCBidXQgY2hlY2tfdG90YWw9JWRcbiIsIHRvdGFsLCBjaGVja190b3RhbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBwcmludGYoIlk9JWRcbj0+JWRcbiIsIHRvdGFsLCBtYXhfY250KTsKfQppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgICBjaGFyICphcmd2MVtdID0geyIiLCAiNTAwIn07CiAgICBjaGFyICphcmd2MltdID0geyIiLCAiMzAwIn07CiAgICBjaGFyICphcmd2M1tdID0geyIiLCAiNDAifTsKICAgIGNoYXIgKmFyZ3Y0W10gPSB7IiIsICI2MCJ9OwogICAgaWYgKGFyZ2MgPD0gMSkgewogICAgICAgIG1haW5fcGFydDExXzI4MShzaXplb2YoYXJndjEpIC8gc2l6ZW9mKGNoYXIqKSwgYXJndjEpOwogICAgICAgIG1haW5fcGFydDExXzI4MShzaXplb2YoYXJndjIpIC8gc2l6ZW9mKGNoYXIqKSwgYXJndjIpOwogICAgICAgIG1haW5fcGFydDExXzI4MShzaXplb2YoYXJndjMpIC8gc2l6ZW9mKGNoYXIqKSwgYXJndjMpOwogICAgICAgIG1haW5fcGFydDExXzI4MShzaXplb2YoYXJndjQpIC8gc2l6ZW9mKGNoYXIqKSwgYXJndjQpOwogICAgfSBlbHNlIHsKICAgICAgICBtYWluX3BhcnQxMV8yODEoYXJnYywgYXJndik7CiAgICB9CiAgICByZXR1cm4gMDsKfQ==