• Java实现 蓝桥杯 算法提高 拿糖果


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

    import java.util.ArrayList;
    import java.util.Scanner;
    
    
    public class 拿糖果 {
    	public static boolean judgePrime(int n) {
            if(n == 2)
                return true;
            for(int i = 2;i <= n;i++) {
                if(n % i == 0)
                    return false;
                if(i > n / 2)
                    break;
            }
            return true;
        }
        //获取n的平方根以内的所有质因数
        public static ArrayList<Integer> getPrime(int n) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            n = (int) Math.sqrt(n);
            for(int i = 2;i <= n;i++) {
                if(judgePrime(i)) {
                        list.add(i);
                }
            }
            return list;
        }
        
        public static void printResult(int n) {
            int[] dp = new int[100005];
            ArrayList<Integer> list = getPrime(100005);
            int len = list.size();
            int judge, prime;
            for(int i = 1;i <= n;i++) {
                judge = (int) Math.sqrt(i);
                for(int j = 0;j < len;j++) {
                    prime = list.get(j);
                    if(prime > judge)
                        break;
                    if(judge % prime == 0) {
                        if(dp[i] < dp[i - prime * 2] + prime)
                            dp[i] = dp[i - prime * 2] + prime;
                    }
                }
            }
            System.out.println(dp[n]);
            return;
        }
        
        
        public static void main(String[] args) {
            
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            printResult(n);
        }
    
    }
    
    
  • 相关阅读:
    从零开始入门 K8s | 应用编排与管理
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    203. Remove Linked List Elements
    183. Customers Who Never Order
    182. Duplicate Emails
    181. Employees Earning More Than Their Managers
    1261. Find Elements in a Contaminated Binary Tree
    1260. Shift 2D Grid
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078822.html
Copyright © 2020-2023  润新知