您的位置:首页 > 其它

Codeforces 526C Om Nom and Candies 完全背包

2017-07-24 10:13 302 查看
传送门

题目大意:它要吃糖果,一共有两种糖果, red 和  blue   ,红色的每个重量为wr, 享受为 hr,  蓝色的每个重量wb, 享受hb     , 他能吃的总量不能超过 C  , 想要最高的幸福指数;

解题思路:完全背包问题,一个for循环遍历每种的个数。   看到大神的代码,有个地方不明白, 为什么循环到10万就可以解决,后来想了想这么认为的:如果两个糖果重量相差10万以内,  那么就可以用十万个糖果调节总重量的大小,可以包含所有的变动了,如果重量相差10万以上各,  那么重量大的那个有十万个的话就超过了10的9次方,  这样就遍历了所有组合;

AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int main()
{
long long c, hr, hb, wr, wb;
scanf("%lld%lld%lld%lld%lld", &c, &hr, &hb, &wr, &wb);
long long vlu  = 0;
for(long long i=0; i<100000; i++)
{
if(wr * i < c)
vlu = max(vlu, hr*i + ((c-wr*i)/wb) * hb);
if(wb * i < c)
vlu = max(vlu, hb*i + ((c-wb*i)/wr) * hr);
}
printf("%lld\n", vlu);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: