NOIP2004 解题报告
第一题:
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。
解题过程:
送分题,模拟即可,但是要注意最后结算的时候除了存的钱,别忘记加上12个月累积下来没有花掉的钱;
15分钟左右一次AC;
第二题:
题目大意:给出n堆果子和各自的重量,要两两合并成一堆,合并的代价是两堆的重量和,求最小的总合并代价。
解题过程:
老题目,每次选取最小的两堆合并,直接循环找O(n^2)必定是超时的,因此可以用小根堆优化,但是手写堆有些麻烦。在建兰培训时提到过一种 更好的方法:
开两个队列,初始队列1为所有堆的重量,合并后的重量放到队列2里,每次取出两个队列队首小的那个的,重复一次,将两个值合并放到队列2里。
第三题:
题目大意:
让一个队伍尽可能少的人出队,使队伍排成以某个同学为最高,向左右递减。
解题过程:
直接分别从左到右,从右到左求以第i个人为结尾的最长上升子序列,在枚举i取最大值即可。时间复杂度O(n^2+n),或者用另外一种方法二分优化到(Onlogn+n);
第四题:(较难)
题目大意:给出N位的竖式加法,每一位都用字母表示,求出字母代表的数字;(输入数据保证唯一解)
解题过程:
一看便是搜索题,但n最大有26,直接枚举字母代表的数字要O(n!)的时间,要加适当的剪枝。
基本算法是回溯,记录字母代表的数字,和每个数字是否用过,从右往左处理每一列,如果碰到字母未确定,就枚举+dfs,并记录进位的情况,如果同一列有2个字母已经确定,那么可以直接计算另外一个,有冲突的话就回溯;
不加任何剪枝能过9个点,50分钟左右写完。
剪枝:由于题目数据保证只有唯一解,用一个flag记录是否已经找到答案,flag=1的时候就直接return;能过10个点。
优化1:枚举不确定的字母的值得时候,改为从n-1到0(原来是从0到n-1),这样效率要快得多,能过11个点,第12个点1100ms左右,就差一些。
然后就卡了N久,百度了半天感觉所有剪枝都用过了,结果卡在了1029ms,就是过不去。。。
最后抱着侥幸心理把string 改成了char数组,一提交居然600ms+AC了。难道取出char数组中的一个元素要比取出string中的一个元素快得多?百度了一下,可惜都没有说这个。八成是这样了。
被最后一个点恶心了2个小时。正道题估计3个小时才AC。
收获:
训练了耐心。。第一次写出5000B+的代码。。
DFS时循环变量从小到大改为从大到小可能会大大加速程序运行时间。
NOIP2004 解题报告的更多相关文章
- CH Round #56 - 国庆节欢乐赛解题报告
最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 习题:codevs 1035 火车停留解题报告
本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...
- 习题: codevs 2492 上帝造题的七分钟2 解题报告
这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...
- 习题:codevs 1519 过路费 解题报告
今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...
- NOIP2016提高组解题报告
NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合
- LeetCode 解题报告索引
最近在准备找工作的算法题,刷刷LeetCode,以下是我的解题报告索引,每一题几乎都有详细的说明,供各位码农参考.根据我自己做的进度持续更新中...... ...
随机推荐
- mysql 检查字符串是否包含子串
1.使用substring_index(src,target,index) 从src的开头查找第index个target.返回的substring为从src的开头到第num个target这段字符串.比 ...
- OpenERP QWeb模板标签笔记
在OpenERP中,通过QWeb来对模板进行渲染后加载到浏览器中,而模板中有许多的标签来定制各种需求变化,在这里记录学习过程中碰到的标签定义,以方便查询. 模板中的标签统一都是以"t-&qu ...
- thinkphp ajax 无刷新分页效果的实现
思路:先做出传统分页效果,然后重新复制一份Page.class.php类,对它进行修改,把js中的函数传到page类中,把上一页.下一页.首页.尾页.链接页中的url地址改成js控制的函数,模板页面中 ...
- AutoCompleteTextView控件的使用
public class MainActivity extends Activity { //[0]声明AutoCompleteTextView要显示的数据 private static final ...
- TCP/IP协议学习(一) LWIP实现网络远程IAP下载更新
最近需要实现通过TCP/IP远程IAP在线更新功能,忙了2周终于在原有嵌入式服务器的基础上实现了该功能,这里就记录下实现的过程. IAP又称在应用编程,其实说简单点就是实现不需要jlink,仅通过芯片 ...
- Hibernate中的Configuration类
Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例. 下面 ...
- OpenGL的glViewPort窗口设置函数实现分屏
之前实现过全景图片查看(OpenGL的几何变换3之内观察全景图),那么我们需要进行分屏该如何实现呢?如下图: 没错就是以前提过的glViewPort函数,废话不多说了,我直接上代码: //从这里开始进 ...
- python语法笔记(二)
1. 循环对象 循环对象是一类特殊的对象,它包含一个next()方法(在python3中是 __next__()方法),该方法的目的是进行到下一个结果,而在结束一系列结果之后,举出 StopItera ...
- virtualbox虚拟机上安装centOS的网络配置(安装centos时选择桥接网络)
最近接触hadoop,需要在在Linux上面开发,所以我装了一个virtualbox虚拟机,在该虚拟机上面安装了一个centOS系统.linux系统是装好了,但是网络配置却另人头疼.我主要是想让宿主机 ...
- 再说TCP神奇的40ms
版权声明:本文由安斌原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/186 来源:腾云阁 https://www.qclou ...