【CodeForces】913 C. Party Lemonade
2018-01-09 11:18
337 查看
【题意】给定n个物品,第i个物品重量为2^(i-1)价值为ci,每个物品可以无限取,求取总重量>=L的最小代价。1<=30<=n,1<=L,ci<=10^9。
【算法】数学(二进制原理)
【题解】实际上每个物品的重量对应答案的一个二进制位,先对物品进行预处理:
1.将没用的大物品用小物品替代(价值不如前面的小物品叠加)。
2.用单价最小的物品补齐后面的二进制位。
然后把L二进制展开,从小到大扫描:如果该位是1则必须选择该物品,如果该位是0则当该物品代价<前面总代价时,用这一个物品替换前面的所有物品。
#include<cstdio> #define ll long long int n,L; ll c[100]; int main(){ scanf("%d%d",&n,&L); for(int i=0;i<n;i++)scanf("%lld",&c[i]); ll mxc=1ll<<60,mxnum=1; for(int i=0;i<n;i++){ if(c[i]*mxnum>mxc*(1<<i))c[i]=1ll*mxc*((1<<i)/mxnum); else mxc=c[i],mxnum=1<<i; } for(int i=n;i<=30;i++)c[i]=1ll*mxc*((1<<i)/mxnum); ll ans=0; for(int i=0;i<=30;i++){ if(L&(1<<i))ans+=c[i];else if(ans>c[i])ans=c[i]; } printf("%lld",ans); return 0; }View Code
相关文章推荐
- codeforces 913 c Party Lemonade(贪心+DP)
- Codeforces 913 C. Party Lemonade (思维)
- codeforces 913 C. Party Lemonade【思维贪心】
- codeforces 913C Party Lemonade
- Codeforces 913C Party Lemonade
- [Code Forces] 913 - Party Lemonade - 贪心
- Codeforces 913C Party Lemonade
- codeforces 913C Party Lemonade
- codeforces-913C Party Lemonade
- 【CodeForces】---Party Lemonade(贪心&&思维&&递归)
- 【Codeforces 808 C. Tea Party】+ sort
- Codeforces 913 A 模拟 B模拟 C 贪心+位运算 D 优先队列+枚举 (补题)
- C. Party Lemonade
- CodeForces 115A Party
- Codeforces 116C. Party 树的深度
- CodeForces 115A Party 求树的高度
- 【CodeForces】913 D. Too Easy Problems
- CodeForces 913 E. Logical Expression
- C. Party Lemonade 很像背包的贪心
- C. Party Lemonade(DP,贪心,数位)