問題描述
媽媽給小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...