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

2021-08-20 04:24:40 字數 720 閱讀 4154

演算法提高 拿糖果  

時間限制: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 輸出格式 最多可以拿多少糖...