藍橋杯 拿糖果

2022-08-22 01:48:16 字數 863 閱讀 3279

問題描述

媽媽給小b買了n塊糖!但是她不允許小b直接吃掉。

假設當前有m塊糖,小b每次可以拿p塊糖,其中p是m的乙個不大於根號下m的質因數。這時,媽媽就會在小b拿了p塊糖以後再從糖堆裡拿走p塊糖。然後小b就可以接著拿糖。

現在小b希望知道最多可以拿多少糖。

輸入格式

乙個整數n

輸出格式

最多可以拿多少糖

樣例輸入

15樣例輸出

6資料規模和約定

n <= 100000

分析:題目中需要反覆用到素數,所以我們可以先打一張素數表出來。

每次遇到素數有兩種決策,取或不取。

於是選擇用動態規劃來做。

dp[i]為當有i顆糖的時候最多能取多少。

狀態轉移方程為  dp[i]=max(dp[i],dp[i-prime[j]*2]+prime[j]);

**如下:

#include #include 

#include

#include

#include

using

namespace

std;

int prime[100005

];int dp[100005

];int

cnt;

void

create()

}if(f==1

) prime[cnt++]=i;

}}

intmain()

//printf("dp[%d]=%d\n",i,dp[i]);

} printf(

"%d\n

",dp[m]);

}

藍橋杯 拿糖果

演算法提高 拿糖果 時間限制 1.0s 記憶體限制 256.0mb 問題描述 媽媽給小b買了n塊糖!但是她不允許小b直接吃掉。假設當前有m塊糖,小b每次可以拿p塊糖,其中p是m的乙個不大於根號下m的質因數。這時,媽媽就會在小b拿了p塊糖以後再從糖堆裡拿走p塊糖。然後小b就可以接著拿糖。現在小b希望知...

藍橋杯 演算法提高 拿糖果 dp

演算法提高 拿糖果 時間限制 1.0s 記憶體限制 256.0mb 問題描述 媽媽給小b買了n塊糖!但是她不允許小b直接吃掉。假設當前有m塊糖,小b每次可以拿p塊糖,其中p是m的乙個不大於根號下m的質因數。這時,媽媽就會在小b拿了p塊糖以後再從糖堆裡拿走p塊糖。然後小b就可以接著拿糖。現在小b希望知...

藍橋杯 拿糖果 動態規劃解法

上次寫過乙個類似的,用的dfs 記憶 媽媽給小b買了n塊糖!但是她不允許小b直接吃掉。假設當前有m塊糖,小b每次可以拿p塊糖,其中p是m的乙個不大於根號下m的質因數。這時,媽媽就會在小b拿了p塊糖以後再從糖堆裡拿走p塊糖。然後小b就可以接著拿糖。現在小b希望知道最多可以拿多少糖。輸入格式 乙個整數n...