Codeforces Hello 2018!C
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Hello 2018!C
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
emmmmm怎么說呢,,,半年了,,,幾乎也沒有什么長進,,,cf? div.2依舊只能做AB,,,懷疑人生
然而,人還是要有夢想呀(最近掉坑三月的獅子無法自拔,大冬天的,暖哭QAQ)
總之,新的一年加油(? ?_?)?,學的慢沒關系,努力努力再努力,思維不好也沒關系,思維也可以練呀(雖然內心是崩潰的)
最可怕的是望著差距止步不前。
C.Party Lemonade
emmmmmm沒做出來,一眼看上去像完全背包,然而……并沒有那么復雜……好好看題啊orz,題目條件不會亂給的orz
第i+1個瓶子的容量為2^i,然后……emmmm二進制有木有(i∈[0,n))
設dp[i]為買2^i的最小花費
買2^i可以買兩瓶2^i-1也可以買一瓶2^i+1,那么對于2^i-1的花費最小為dp[i]=min(dp[i],dp[i-1]*2),然后逆序再掃一遍dp[i]=min(dp[i+1],dp[i])
經過兩次循環,dp可以更新為最小花費。
然后來考慮一下目標量L的最小花費,L同樣可以表示為二進制,二進制位為1則取dp[i],為0則取min(當前花費,dp[i])
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAX=1e3+5; ll dp[35]; ll sum=0,n,l; int main() {cin>>n>>l;memset(dp,0x3f3f3f,sizeof(dp));for(int i=0;i<n;i++)cin>>dp[i];for(int i=1;i<n;i++)dp[i]=min(dp[i],dp[i-1]*2);for(int i=n-2;i>0;i--)dp[i]=min(dp[i+1],dp[i]);for(int i=n;i<31;i++)dp[i]=dp[i-1]<<1;for(int i=0;i<31;i++){if(l&(1<<i)) sum+=dp[i];else if(sum>dp[i]) sum=dp[i];}return 0; }?
轉載于:https://www.cnblogs.com/Egoist-/p/8278066.html
總結
以上是生活随笔為你收集整理的Codeforces Hello 2018!C的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fresco的使用教程
- 下一篇: 有专门介绍RobotStudi的教材吗?