xuanxuan001的练习赛Round1 总结

x u a n x u a n 001 xuanxuan001 xuanxuan001的练习赛 R o u n d 1 Round1 Round1 总结

这一场比赛我考了 210 210 210分,还算可以(因为满分是 300 300 300)。

第一题:随机数

解题方法

这道题有 2 2 2种方法。

  • 找规律
    可以发现每一次总和的数都在 [ n , 2 n ] [n,2n] [n,2n]
    我们看 n = 3 n=3 n=3时的情况:
    在这里插入图片描述
    注:上图中红色字表示这个数字出现的次数。
    我们再来看 n = 4 n=4 n=4时的情况:
    在这里插入图片描述
    n = 3 n=3 n=3时,每一个数字出现的次数分别是 1331 1331 1331
    n = 4 n=4 n=4时,每一个数字出现的次数分别是 14641 14641 14641
    一看,就可以发现这是杨辉三角的一部分。
    不懂杨辉三角的可以去这里
    杨辉三角递推公式:
    a i , j = { 1 i = 1 , j = 1 0 i = 0 0 j = 0 a i − 1 , j + a i − 1 , j − 1 i > 1 , 1 ≤ j ≤ i a_{i,j}=\begin{cases} 1&i=1,j=1\\ 0&i=0\\ 0&j=0\\ a_{i-1,j}+a_{i-1,j-1}&i>1,1\leq j\leq i \end{cases} ai,j=100ai1,j+ai1,j1i=1,j=1i=0j=0i>1,1ji
    但是当 n = 1 n=1 n=1时,当前匹配的应该是杨辉三角的第二行。
    所以我们直接从第二行开始递推。
    注意第 i i i行有 i + 1 i+1 i+1个数字。
    递推公式:
    a i , j = { 1 i = 1 , j ∈ [ 1 , 2 ] a i − 1 , j + a i − 1 , j − 1 i > 1 , j ∈ [ 1 , i + 1 ] a_{i,j}=\begin{cases} 1&i=1,j\in[1,2]\\ a_{i-1,j}+a_{i-1,j-1}&i>1,j\in[1,i+1] \end{cases} ai,j={1ai1,j+ai1,j1i=1,j[1,2]i>1,j[1,i+1]
    答案就是 ∑ i = 1 n + 1 a n , i × ( i + n − 1 ) \sum_{i=1}^{n+1}{a_{n,i}\times (i+n-1)} i=1n+1an,i×(i+n1)
    上式的 i + n − 1 i+n-1 i+n1就是每一个数字。
    这样就可以做到 20 20 20分。
    我们考虑对上式优化。
    首先我们知道杨辉三角的每一行都是对称回文的。
    也就是说 a i , j = a i , n + 1 − j + 1 = a i , n − j + 2 a_{i,j}=a_{i,n+1-j+1}=a_{i,n-j+2} ai,j=ai,n+1j+1=ai,nj+2
    那么我们可以运用小学数学的分配律来解决。
    我们把第 i i i项和第 n − i + 2 n-i+2 ni+2项的数字相加。
    因为第 i i i项的数字是 n + i − 1 n+i-1 n+i1,第 n − i + 2 n-i+2 ni+2项的数字 2 n − i + 1 2n-i+1 2ni+1(这个可以自己推一下)。
    所以两项之和等于 n + i − 1 + 2 n − i + 1 = 3 n n+i-1+2n-i+1=3n n+i1+2ni+1=3n
    因此我们直接结合,答案就等于 ∑ i = 1 ⌈ ( n + 1 ) / 2 ⌉ 3 n × a n , i \sum_{i=1}^{\lceil(n+1)/2\rceil}{3n\times a_{n,i}} i=1(n+1)/23n×an,i
    我们发现每个式子都有 3 n 3n 3n,所以结合得 3 n × ∑ i = 1 ⌈ ( n + 1 ) / 2 ⌉ a n , i 3n\times\sum_{i=1}^{\lceil(n+1)/2\rceil}{a_{n,i}} 3n×i=1(n+1)/2an,i
    可以发现 ∑ i = 1 ⌈ ( n + 1 ) / 2 ⌉ a n , i \sum_{i=1}^{\lceil(n+1)/2\rceil}{a_{n,i}} i=1(n+1)/2an,i等于 ∑ i = 1 n + 1 a n , i × 1 2 \sum_{i=1}^{n+1}{a_{n,i}}\times\frac{1}{2} i=1n+1an,i×21
    我们现在要求 ∑ i = 1 n + 1 a n , i × 1 2 \sum_{i=1}^{n+1}{a_{n,i}}\times\frac{1}{2} i=1n+1an,i×21,怎么办?
    有一个定理,就是杨辉三角的第 i i i行的所有数之和等于 2 i − 1 2^{i-1} 2i1
    由于我们把第一行省略了,所以应该是,杨辉三角的第 i i i行的所有数之和等于 2 i 2^i 2i
    证明略。
    答案就等于 3 n × 2 n × 1 2 3n\times2^n\times\frac{1}{2} 3n×2n×21
    但是我们要求的是期望,最后还要除以总数。
    总数怎么求?
    根据乘法原理,第 i i i个位置可以选择 1 1 1 2 2 2这两种方案,一共有 n n n个位置,所以一共有 2 n 2^n 2n个方案。
    3 n × 2 n × 1 2 3n\times2^n\times\frac{1}{2} 3n×2n×21除以 2 n 2^n 2n,得 3 2 n \frac{3}{2}n 23n.
    由于数据比较大,你可以用高精度,或直接乘以 1.5 1.5 1.5,都不会爆。
  • d p dp dp
    我们可以直接用动态规划做这题,答案还是跟我的方法一样,这里就不讲了。

得分情况

比赛时满分。

第二题:整理书包

解题方法

我做了 60 60 60分,直接做一个 01 01 01背包。
满分,搜索 + d p +dp +dp

得分情况

比赛时 60 60 60分。

第三题:购物

解题方法

暴力二重循环对了五个点,错了一个点,其他点超时。
我的方法算是贪心吧。
每次把可以放的都放进去就行了。
满分方法:
在这里插入图片描述
看了之后,似乎是二分图,可是我没学。

得分情况

比赛时 50 50 50分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值