日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

巧克力棒

發(fā)布時(shí)間:2025/3/15 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 巧克力棒 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

巧克力棒(chocolate)
Time Limit:1000ms Memory Limit:64MB
【題目描述】
LYK 找到了一根巧克力棒,但是這根巧克力棒太長(zhǎng)了,LYK 無(wú)法一口吞進(jìn)去。具體地,這根巧克力棒長(zhǎng)為 n,它想將這根巧克力棒折成 n 段長(zhǎng)為 1 的巧克力棒,然后慢慢享用。它打算每次將一根長(zhǎng)為 k 的巧克力棒折成兩段長(zhǎng)為 a 和 b 的巧克力棒,此時(shí)若 a=b,則LYK 覺(jué)得它完成了一件非常困難的事,并會(huì)得到 1 點(diǎn)成就感。LYK 想知道一根長(zhǎng)度為 n 的巧克力棒能使它得到最多幾點(diǎn)成就感。
【輸入格式】(chocolate.in)
  第一行一個(gè)數(shù) n。
【輸出格式】(chocolate.out)
  一個(gè)數(shù)表示答案。
【輸入樣例】
  7
【輸出樣例】
  4
【數(shù)據(jù)范圍】
  對(duì)于 20%的數(shù)據(jù) n<=5。
  對(duì)于 50%的數(shù)據(jù) n<=20。
  對(duì)于 80%的數(shù)據(jù) n<=2000。
  對(duì)于 100%的數(shù)據(jù) n<=1000000000。
【樣例解釋】
  將 7 掰成 3+4, 將 3 掰成 1+2, 將 4 掰成 2+2 獲得 1 點(diǎn)成就感, 將剩下的所有 2 掰成 1+1獲得 3 點(diǎn)成就感。總共 4 點(diǎn)成就感。

【題目分析】

  可以發(fā)現(xiàn),如果巧克力棒的長(zhǎng)度為2^x的話,那他將獲得2^x-1點(diǎn)成就感(這個(gè)很容易證明,因?yàn)槟忝恳淮握鄱紩?huì)增加成就感,需要折2^x-1次)。那么問(wèn)題來(lái)了,如果他給出的長(zhǎng)度不恰好為2^x怎么辦,因?yàn)閱?wèn)題是要求出最大成就感,那我們就找到最大的x使得2^x剛好小于或等于給出的這個(gè)長(zhǎng)度(剛好就是說(shuō)2^(x+1)就會(huì)大于長(zhǎng)度),然后繼續(xù)找出剩下的那段的最大加到答案里,就不停找不停找....復(fù)雜度的話我算不出來(lái),總之不會(huì)超時(shí)

#include <cstdio> #include <cstring> #include <iostream> using namespace std; int a[35]; int ans; int n; int solve(int pos,int s) {int i;if(s==1||s==0) return 0;for(i=pos;i>=0;i--)if(s>=a[i])break;return a[i]-1+solve(i,s-a[i]); }int main() {freopen("chocolate.in","r",stdin);freopen("chocolate.out","w",stdout);a[0]=1;for(int i=1;i<=30;i++)a[i]=a[i-1]*2;scanf("%d",&n);int xx=1;for(int i=0;i<=n;i++){if(xx>=n){ans=solve(i,n);break;}xx*=2;}printf("%d",ans);fclose(stdin);fclose(stdout); }

?

轉(zhuǎn)載于:https://www.cnblogs.com/xiaoningmeng/p/6039004.html

總結(jié)

以上是生活随笔為你收集整理的巧克力棒的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。