题解 CF1271A 【Suits】

呵呵侠

2020-04-10 11:53:01

Solution

这是一道贪心题,我们来简单分析一下贪心策略: + 由一个领带和一件夹克衫组成,其收益为$\text{ e }$元。 + 由一条围巾,一件背心和一件夹克衫组成,其收益为$\text{ f }$元。 我们可以发现,两种套装的公共部分是夹克衫,而且需要的夹克衫的数量都一样,所以夹克衫不能浪费,只能用在更贵的套装上面。 所以就出思路了,我们尽量多做更贵的套装,如果实在做不了就做另一种套装。 代码如下: ```cpp #include <iostream> using namespace std; int main() { int a, b, c, d, e, f; cin >> a >> b >> c >> d >> e >> f; int sum = 0; for(int i = 1; i <= d; i = i + 1) //这是一个不太容易理解的循环,有几件夹克衫就可以做几个套装,所以循环次数就是夹克衫的件数 { if(e > f) //如果夹克衫+领带的价钱大于夹克衫+围巾+背心的价钱,那么: { if(a > 0) //如果还有剩余领带 { a = a - 1; //剩余领带-1 sum = sum + e; //总额增加套装1的价钱 } else if(b > 0 && c > 0) //如果没有剩余领带,但是还有围巾和背心 { b = b - 1; //剩余围巾-1 c = c - 1; //剩余背心-1 sum = sum + f; //总额增加套装2的价钱 } else //如果只有夹克衫,其他的啥都没有 { break; //那么终止循环,无需浪费时间 } } else //反之: { if(b > 0 && c > 0) //如果还有剩余的围巾和背心 { b = b - 1; //剩余围巾-1 c = c - 1; //剩余背心-1 sum = sum + f; //总额增加套装2的价钱 } else if(a > 0) //如果没有剩余的围巾和背心,但是还有剩余的领带 { a = a - 1; //剩余领带-1 sum = sum + e; //总额增加套装1的价钱 } else //如果只有夹克衫,其他的啥都没有 { break; //那么终止循环,无需浪费时间 } } } cout << sum << endl; //输出 return 0; //完结撒花 } ```