C语言 · 拿糖果

算法提高 拿糖果

时间限制:1.0s   内存限制:256.0MB

问题描述

  妈妈给小B买了N块糖!但是她不允许小B直接吃掉。
  假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。
  现在小B希望知道最多可以拿多少糖。

输入格式

  一个整数N

输出格式

  最多可以拿多少糖

样例输入

15

样例输出

6

数据规模和约定

  N <= 100000

作者注释:

1、题目易懂。

2、学会一招:#define max(a,b) (a>b)?a:b——若在之前学会,会省多少时间了。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<math.h>
 4 #define max(a,b) (a>b)?a:b
 5 int prime[110], vis[350], dp[100010];
 6 main(){
 7     int n, cur, i, j, k;
 8     scanf("%d", &n);
 9     cur=0;
10     memset(vis, 0, sizeof(vis));
11     for(i=2; i<350; i++){
12         if(!vis[i]){
13             prime[cur++]=i;
14             for(j=i+i; j<350; j=j+i){
15                 vis[j]=1;
16             }
17         }
18     }
19     memset(dp, 0, sizeof(dp));
20     for(i=1; i<=n; i++){
21         for(j=0; j<=cur-1; j++){
22             if(prime[j]<=sqrt(i)){
23                 if(i%prime[j]==0)
24                 dp[i]=max(dp[i],dp[i-2*prime[j]]+prime[j]);//拿多的
25             }
26             else{
27                 break;
28             }
29         }
30     }
31     printf("%d",dp[n]);
32 }
时间: 2024-11-07 00:43:52

C语言 · 拿糖果的相关文章

C语言 &#183; 分糖果

历届试题 分糖果 时间限制:1.0s   内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子. 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数. 反复进行这个游戏,直到所有小朋友的糖果数都相同为止. 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果. 输入格式 程序首先读入一个整数N(2<N<100),表示小朋友的人数. 接着是一行用空格分开的N个偶数(

[转]100个经典C语言程序(益智类问题)

目录: 1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 8.借书方案知多少 9.杨辉三角形 10.数制转换 11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 1.7 分数四则运算 17.平分七筐鱼 18.有限5位数 19. 8 除不尽的数 21.4位反序数 22.求车速 23.阿姆斯特朗数 24.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+c

[转]100个经典C语言程序

本文转载自:http://blog.sina.com.cn/s/articlelist_1615065844_0_1.html 1.绘制余弦曲线 在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线*问题分析与算法设计如果在程序中使用数组,这个问题十分简单.但若规定不能使用数组,问题就变得不容易了. 关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行. 为了获得本文要求的图形就必须在一行

C# 动态语言特性,dynamic 关键字研究

原文:C# 动态语言特性,dynamic 关键字研究 1       动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 JavaScript 根本没使用过,别人一定把你当成从火星回来的吧! 很多使用过 JavaScript 的程序员,刚开始对其动态特性深恶痛绝,欲除之而后快,但是一旦熟悉这个语言以后,又会发疯般的爱上她(我的野蛮女友). 以创建一个“人”为例, Java

长安大学第四届“迎新杯”程序设计竞赛 H 圣诞节糖果【二分】

时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言262144K64bit IO Format: %lld 题目描述 圣诞节临近,彩虹岛的黑心商人??????的糖果店又开始热闹了起来,热心的??????来到??????的店里面帮忙包装糖果.店里面共有??堆糖果,其中第??堆有????颗糖果,??????让??????从中选择两堆糖果,这两堆糖果中每?? 颗包装在一起,如果最后还有剩余就归??????所有了,若两堆不足??个则全部归??????所有.作为糖果狂热

C语言常见问题总结

1. 多次运行程序 解决方法:错误原因是,已经编译运行出一个exe,没有关闭此exe,又点击编译运行.应该将之前运行出的exe关闭,再来运行代码 2. 单精度类型和双精度类型如何区分使用...解决方法:单精度和双精度的区别是精确的小数点后的位数.并且双精度叫double型,单精度float型. 3. 字符串数组何如初始化及定义出现错误: 错误代码:解决方法:赋值的时候使用strcpy函数. 4. 程序中没写主函数main出现错误: 解决方法:缺少主函数main,程序无法执行.在书(C语言项目实战

100个经典C语言程序(益智类)

100个经典C语言程序(益智类) [1.绘制余弦曲线] 在屏幕上用"*"显示0~360度的余弦函数cos(x)曲线 [问题分析与算法设计] 利用cos(x)的左右对称性,将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就 应为62-m.程序中利用反余弦函数acos计算坐标(x,y)的对应关系. #include<st

2018首届传神者大会:“语言+新技术”将推动语言产业生态化发展 2018首届传神者大会圆满落幕,

2018首届传神者大会:"语言+新技术"将推动语言产业生态化发展 2018首届传神者大会圆满落幕,"语言+新技术"或开启全球深度互联时代智联未来,跨界赋能 1211首届传神者大会圆满落幕 2018年12月11日,"1211首届传神者大会"在中国武汉隆重召开,来自不同领域的千余名行业翘楚齐聚江城,共同探索语言文化传播领域如何跨界融合发展,构建行业全新生态.大会以"跨界?连接"为主题,由中国光谷多语产业技术创新战略联盟主办,全球创

C语言的抽象与函数指针--思想(转)

一.何为抽象? 从小到大,我们接触到的抽象,最熟悉的莫过于数学了.为什么这样说呢? 比如说,在小学的时候,老师总是拿了几个苹果来引诱我们:同学们,这里有几个苹果啊?于是我们流着口水一个个地数,一个苹果,两个苹果,三个苹果,然后说三个苹果!第二回,老师又拿了三只葡萄来引诱我们:同学们,这里有几只葡萄啊?于是我们又一只只数过来:一只葡萄二只葡萄三只葡萄,三只葡萄!第三天,老师又拿了三颗糖果来问我们:同学们,这里有几颗糖果啊?我们又数开了:一颗糖果,两颗糖果,三颗糖果!回答:三颗糖果.  每一次老师拿