题目链接:http://codeforces.com/problemset/problem/466/A
题目意思:一个 ride 需要 a 卢布,m 个 ride 需要 b 卢布,这两种方案都可以无限制地采用,要完成 n rides 最少需要多少卢布。
只要理清思路,一步一步做就不难了。
首先 要知道 n 和 m 的大小关系是不确定的,有可能出现 n < m 情况。此时面临的选择是:一张 b 卢布 还是 n * a 卢布。
如果 n >= m 要分情况讨论。
由于我们希望用的卢布越少越好,那么首先算出如果用 b 卢布,就需要比较 a 和 b/m(每个ride需要多少卢布) 的大小关系,如果后者比较少,那么就希望用尽可能多的 b 卢布。最后如果有余数r,就看对于这个余数是采用 r*a 还是 b;如果 a < b/m,那么 n 个 rides 都用 a 卢布来达成。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespace std; 6 7 int main() 8 { 9 int n, m, k; 10 double a, b; 11 while (scanf("%d%d%lf%lf", &n, &m, &a, &b) != EOF) 12 { 13 int ans; 14 if (n < m) 15 ans = (a*n > b ? b : a*n); 16 else if (a >= b/m) 17 { 18 ans = n/m * b; 19 int r = n - n/m * m; 20 if (r) 21 ans += min(r*a, b); 22 } 23 else 24 ans = n * a; 25 printf("%d ", ans); 26 } 27 return 0; 28 }