蓝桥杯练习:算法提高 拿糖果

    xiaoxiao2021-03-25  90

    问题描述   妈妈给小B买了N块糖!但是她不允许小B直接吃掉。   假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。   现在小B希望知道最多可以拿多少糖。 输入格式   一个整数N 输出格式   最多可以拿多少糖 样例输入 15 样例输出 6 数据规模和约定

      N <= 100000

    package lanqiao; import java.util.Scanner; public class Main { static int prime[]=new int[50000]; static int dp[]=new int[100005]; static int book[]=new int[100005]; static int cnt = 0; public static void create() { int len = (int) Math.sqrt(100005); for(int i = 2; i <= len; i++) { if(book[i] == 0) { prime[cnt++] = i; for(int j = i * i; j <= len; j = j + i) book[j] = 1; } } } public static void main(String[] args) { Scanner scanner=new Scanner(System.in); create(); int n; n=scanner.nextInt(); for(int i = 1; i <= n; i++) { for(int j = 0; j < cnt; j++) { if(prime[j] > Math.sqrt(i)) break; if(i % prime[j] == 0) dp[i] = Math.max(dp[i], dp[i-2*prime[j]] + prime[j]); } } System.out.println(dp[n]); } }

    转载请注明原文地址: https://ju.6miu.com/read-38927.html

    最新回复(0)