演算法提高 拿糖果
時間限制:1.0s 記憶體限制:256.0mb
問題描述
媽媽給小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-2*j]+j) ,j 表示不大於 i 的 平方根的質因數, 也就是可以從所有滿足此條件的j轉移到dp[i]
#include#include#include#includeusing namespace std;
int n;
int dp[100000+5];
bool isprim(int n)//判斷是不是素數
return true;
}int main()
} dp[i] = ans;
} printf("%d\n",dp[n]);
return 0;
}
演算法提高 拿糖果 線性DP
思路 首先給小於根號n的素數打表。d i 表示當前剩餘i顆糖,最多可以拿到多少糖。轉移方程 d i max d i k d i 2 k 此處k表示她可以從i顆糖中拿的糖數量,即k是素數並且i k 0。注意 媽媽可以拿的糖的數量如果不足p,則拿糖結束。ac include include includ...
藍橋杯 拿糖果
演算法提高 拿糖果 時間限制 1.0s 記憶體限制 256.0mb 問題描述 媽媽給小b買了n塊糖!但是她不允許小b直接吃掉。假設當前有m塊糖,小b每次可以拿p塊糖,其中p是m的乙個不大於根號下m的質因數。這時,媽媽就會在小b拿了p塊糖以後再從糖堆裡拿走p塊糖。然後小b就可以接著拿糖。現在小b希望知...
藍橋杯 拿糖果
問題描述 媽媽給小b買了n塊糖!但是她不允許小b直接吃掉。假設當前有m塊糖,小b每次可以拿p塊糖,其中p是m的乙個不大於根號下m的質因數。這時,媽媽就會在小b拿了p塊糖以後再從糖堆裡拿走p塊糖。然後小b就可以接著拿糖。現在小b希望知道最多可以拿多少糖。輸入格式 乙個整數n 輸出格式 最多可以拿多少糖...