Codeforces 526C Om Nom and Candies 完全背包

来源:互联网 发布:零基础java视频教程 编辑:程序博客网 时间:2024/06/04 23:21



传送门



题目大意:它要吃糖果,一共有两种糖果, 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;}



原创粉丝点击