UVA 10717 - Mint

来源:互联网 发布:电脑启动不了windows 编辑:程序博客网 时间:2024/05/09 19:05

求lcm,枚举所有4种硬币就可以了.

#include <iostream>#include <climits>#include <cstdio>#include <cmath>using namespace std;const int MAX = 51;int len[MAX],n, t, ans_min, ans_max;int gcd(int a, int b){return !b ? a : gcd(b, a % b);}int lcm(int a, int b){return a / gcd(a, b) * b;}int main(){while(scanf("%d%d", &n, &t) && (n || t)){for(int i = 0; i < n; ++i){scanf("%d", &len[i]);}while(t--){int disired_len;scanf("%d", &disired_len);ans_min = INT_MAX;ans_max = INT_MIN;for(int i = 0; i < n; ++i){for(int j = i + 1; j < n; ++j){int lcm2 = lcm(len[i], len[j]);for(int k = j + 1; k < n; ++k){int lcm3 = lcm(len[k], lcm2);for(int t = k + 1; t < n; ++t){int lcm4 = lcm(len[t], lcm3);int lower = disired_len / lcm4;ans_max = max(ans_max, lower * lcm4);int upper = (int)ceil(disired_len * 1.0 / lcm4);ans_min = min(ans_min, upper * lcm4);}}}}printf("%d %d\n", ans_max, ans_min);}}return 0;}


0 0
原创粉丝点击