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代码:
题目大意:它要吃糖果,一共有两种糖果, 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; }
相关文章推荐
- Codeforces 284E Coin Troubles【思维+拓扑排序+完全背包】好题!
- Codeforces 544C Writing Code【二维完全背包】
- Codeforces 189A. Cut Ribbon 完全背包
- codeforces189 A. Cut Ribbon【完全背包】
- CodeForces 543A - Writing Code DP 完全背包
- codeforces 543A 完全背包
- 【Codeforces 283 C. Coin Troubles】+ 拓扑序 + 完全背包
- codeforces 543A Writing Code(dp降维优化,完全背包思想)
- CodeForces - 417A Elimination (完全背包)
- Codeforces 189A - Cut Ribbon (dp + 完全背包)
- CODEFORCES 189A(完全背包完全装满)
- CodeForces 632E Thief in a Shop(DP|完全背包)
- codeforces 543A A. Writing Code(完全背包优化dp )
- [Codeforces 543A] Writing Code (完全背包DP)
- ZOJ 4508 湫湫系列故事——减肥记I(完全背包)
- POJ - 3181 Dollar Dayz 完全背包 + 整数拆分(高精度)
- 背包九讲之完全背包问题
- EOJ Monthly 2018.2 (Good bye 2017) A2. 坑爹的售票机【完全背包】
- HDU 1114 1248(DP,完全背包)
- HDU 1248(完全背包)