2018.7.9 && 2018.7.10 模拟赛总结

Posted miracevin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.7.9 && 2018.7.10 模拟赛总结相关的知识,希望对你有一定的参考价值。

2018.7.9:

T1:

技术分享图片

 

原题吃夜宵,可是还是不会。

对于剩下的钱不能用来买其他的东西怎么处理,毫无头绪。

正解:

将礼物的价值排序,每次钦定一个礼物,这个礼物要被剩下,这个礼物之前的礼物都买走的方案数。

因为价值是从小到大排序的,我们先算出来之前所有礼物的价值总和,计算出剩下的钱数。

用这个礼物之后的所有礼物跑一个背包,(注意是之后的礼物,这个礼物已经钦定不买)f[j]表示花了j元钱,买的方案数。

这样,剩下的钱数必须在这个礼物价值之下,O(n)扫一遍f[j],统计一下方案数。

依次从前往后枚举剩下哪个即可。

但是这个是N^3的,

所以考虑调一下顺序。我们发现,每次钦定了一个较小的i不买,但是之后的i+10,i+1000,等要被背包很多遍,而且许多数都是一样的。是没有必要的。

所以倒序。

钦定最后一个不能买,这个直接算就好了。

倒数第二个不能买,用倒数第一个跑背包,,,统计。、

倒数第三个不能买,倒数第二个继续上一次跑的背包结果继续跑。

。。。。

这样利用平时背包的外层循环物品的顺序,就可以每次只加上一个物品跑背包。

复杂度:O(n^2)枚举*扫描统计

 

为什么这样做会不重不漏呢?

第一,我们每次钦定剩下了一个礼物,那么每次只能剩下比这个礼物少的钱数,统计一下,是不会重、漏的。

第二,随着循环,每次会有一个礼物一定不选,而下一次这个礼物一定选。这样是不会重复的。

第三,每次背包跑的是礼物之后的所有礼物,根据0/1背包倒序循环的技巧,这样也是不重不漏的。

 

T2:

技术分享图片

打表找规律,O(1)公式就好了。

该死long double可能数据大了会挂,不知道为什么。

czy:Windows环境下,long double可能会挂。

感谢ryc借用我的linux环境评测,证明long double在linux下是可以的。(noip就放心了)

不过不必要的时候,最好不要用long double ,毕竟这个就一个O(1)公式直接算,精度误差没有多少。

long double输出:%Lf

正解:

“算法:组合数学题
可以将原问题转化一下,看成是在一个二维平面上行走,+1看成移动(1,0)
-1看成移动(0,1),那么到达(N,M)点且路线又不走到y=x这条直线上方的路线总数就是
答案,这个组合问题很经典,方案数为C(M,M+N)-C(M-1,M+N),所以
可以知道答案就是1-M/(N+1) ”

 

T3:

技术分享图片

 

数位DP

思路比较正确。也处理出来了n-1位及以下的符合数目了。

但是处理最上面一层的方案还是有待改进。(即:e.g. : 100..00~342..34 )

gsh的方法是:

递归处理。例如:7320926

考虑第一位,如果不放限制位的话,有6(无0)*10^3*9^3 即:前一半随便放,后面一半不能放这个数。(并且放的数字是没有限制的)

如果放限制位的话,递归进入下一位:

这一位不放3,有3(0,1,2)*10^2*9^3...

.....

每次选择放限制位的情况递归下去。。。

直到过了一半:

9这一位:

如果不放9,因为和9对应位是2,所以这一位不能放2的。

有: (9-1)*9^2种。

放9递归到下一位:

是2。

不放2,因为这里对应位是3,比2大,可以放0,1两种

所以是:2*9^1

递归到6

不放,6种

放,1种,直接回溯了。

最后把答案统计上就可以了。

 

应该对于最上面一层的处理方法还可以用dp。因为限制是对称的。

设f[i][0/1]表示,从外往里第i,和第n-i+1(n是位数)个数,限制、不限制,合法的方案数。

统计出来合法的。

 

两种方法,最后都加上n-1以下位预处理的结果。

1~9 ten[1]=9

10~99 ten[2]=81

100~999 ten[3]=810

1000~9999ten[4]=7290

发现和9的次方有关,递推即可,要么乘10,要么乘9

 

总结:

第一题应该有一些想法的。通过枚举每个礼物不买,可以确定出哪个礼物一定要买,哪个可买可不买。更关键的是,知道了统计答案的时候,选择f[j]中的哪些部分。

第三题1.5h并没有想出正解。半天容斥发现太麻烦。最后才想出dp,可惜时间不够了。还是应该观察性质,对称dp就可以统计了。

 140/300 ez rank1 赵予茁 230分





以上是关于2018.7.9 && 2018.7.10 模拟赛总结的主要内容,如果未能解决你的问题,请参考以下文章

2018-7-9 第一节

周记2018.7.9~7.15

2018.7.9 AVR-BAT program

2018-7-9

OpenCV学习(2018.7.9)

工具文章目录