演算法提高 拿糖果
演算法提高 拿糖果
時間限制:1.0s 記憶體限制:256.0MB
問題描述
媽媽給小B買了N塊糖!但是她不允許小B直接吃掉。
假設當前有M塊糖,小B每次可以拿P塊糖,其中P是M的一個不大於根號下M的質因數。這時,媽媽就會在小B拿了P塊糖以後再從糖堆裡拿走P塊糖。然後小B就可以接著拿糖。
現在小B希望知道最多可以拿多少糖。
假設當前有M塊糖,小B每次可以拿P塊糖,其中P是M的一個不大於根號下M的質因數。這時,媽媽就會在小B拿了P塊糖以後再從糖堆裡拿走P塊糖。然後小B就可以接著拿糖。
現在小B希望知道最多可以拿多少糖。
輸入格式
一個整數N
輸出格式
最多可以拿多少糖
樣例輸入
15
樣例輸出
6
資料規模和約定
N <= 100000
素數篩法,對於每一個小於sqrt(n)的一個n的質因子,動歸表示式
dp[i]=max(dp[i],dp[i-2*prime[j]]+prime[j]) 1.不選取這個數,結果還是原來的,
2.選這個數,結果就是dp[i-2*prime[j]]+prime[j]
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int prime[110];int vis[110];
int dp[100010];
int main()
{
int n;
scanf("%d",&n);
memset(vis,0,sizeof(vis));
int cur=0;
for(int i=2;i<=350;i++)
{
if(!vis[i])
{
prime[cur++]=i;
for(int j=2*i;j<=350;j+=i)
{
vis[j]=1;
}
}
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
{
for(int j=0;j<cur;j++)
{
if(prime[j]<=sqrt(i))
{
if(i%prime[j]==0)
{
dp[i]=max(dp[i],dp[i-2*prime[j]]+prime[j]);
}
}
else break;
}
}
printf("%d\n",dp[n]);
return 0;
}
相關文章
- 藍橋杯 演算法提高 拿糖果(完全揹包dp)演算法
- python演算法:分糖果Python演算法
- 演算法 拿硬幣演算法
- 三分鐘看完「分糖果」演算法問題演算法
- 【LeetCode】貪心演算法–分發糖果(135)LeetCode演算法
- 演算法提高 超級瑪麗演算法
- LeetCode 分發糖果LeetCode
- 可以獎勵幾個糖果
- 糖果單詞 7.13 exalt, humble, modest
- 糖果;及子串查詢分析
- 拷貝連結串列;及糖果分析
- 藍橋杯演算法提高——字串匹配(Java)演算法字串匹配Java
- 藍橋杯 演算法提高 字串壓縮演算法字串
- 演算法提高 聰明的美食家演算法
- wordpress拿WebShellWebshell
- 演算法工程師如何拿結果:走過低谷,先立信念演算法工程師
- 糖果世界模式系統應用開發模式
- 東華OJ 陣列競賽 分糖果陣列
- (動態規劃)最小分糖果問題動態規劃
- LeetCode135. 分發糖果LeetCode
- LeetCode 1103[分糖果II]LeetCode
- [藍橋杯][演算法提高VIP]尤拉函式演算法函式
- [藍橋杯][演算法提高VIP]超級瑪麗演算法
- [藍橋杯][演算法提高VIP]大數加法演算法
- 利用AdaBoost元演算法提高分類效能演算法
- leetcode 135. 分發糖果 (相鄰的孩子中,評分高的必須糖果更多) 思維LeetCode
- [藍橋杯][演算法提高VIP]奪寶奇兵 dp演算法
- 演算法提高 我們的征途是星辰大海演算法
- 試題 演算法提高 質數2(C語言)演算法C語言
- 演算法提高 c++_ch04_02_修正版演算法C++
- 演算法提高 11-2刪除重複元素演算法
- 試題集—— 演算法提高 學霸的迷宮演算法
- kedaOJ#P0764. 小可的糖果盒
- 51nod1548 歐姆諾姆和糖果
- 藍橋杯 -- 演算法提高 身份證號碼升級演算法
- [藍橋杯][演算法提高VIP]分蘋果 線段樹演算法蘋果
- 演算法提高 12-1三角形演算法
- Java實現 藍橋杯 演算法提高 八數碼(BFS)Java演算法