思路:首先給小於根號n的素數打表。d(i)表示當前剩餘i顆糖,最多可以拿到多少糖。
轉移方程:d(i) = max(d(i), k + d(i - 2 * k)),此處k表示她可以從i顆糖中拿的糖數量,即k是素數並且i % k == 0。
注意:媽媽可以拿的糖的數量如果不足p,則拿糖結束。
ac**:
#include #include#include #include #include #include #include #include #include #include #include #include using namespace std;
#define eps 1e-10
#define inf 0x3f3f3f3f
#define pi pairconst int maxn = 1e5 + 5;
int vis[500], d[maxn];
void init(int n)
int dfs(int n)
} return d[n];
}int main()
return 0;
}
如有不當之處歡迎指出!
藍橋杯 演算法提高 拿糖果 dp
演算法提高 拿糖果 時間限制 1.0s 記憶體限制 256.0mb 問題描述 媽媽給小b買了n塊糖!但是她不允許小b直接吃掉。假設當前有m塊糖,小b每次可以拿p塊糖,其中p是m的乙個不大於根號下m的質因數。這時,媽媽就會在小b拿了p塊糖以後再從糖堆裡拿走p塊糖。然後小b就可以接著拿糖。現在小b希望知...
演算法提高 拿糖果
演算法提高 拿糖果 時間限制 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 輸出格式 最多可以拿多少糖...