- 博客(3)
- 收藏
- 关注
原创 洛谷 P5684 讲解(C++)
最后,在计算重复字母时,我们只需要计算 num * (num - 1) * ...... *(num / 2 + 2) *(num / 2 + 1)。总排列个数很容易求,即 n * (n - 1) * (n - 2) * ...... * 2 * 1。如果有字母相等,我们应求出其排列个数 (设其为 num) ,即 num * (num - 1) * ...... * 2 * 1。个数,即 (n / 2) * (n / 2 - 1) * ...... * 2 * 1。所以,我们可以先求出回文串个数,再用总。
2024-03-26 21:11:36 622
原创 洛谷 P5662 讲解(C++)
price[ i ][ j ]:第 i 天第 j 个纪念品的价格money: 昨天预计所能拥有的最多的钱因为,我们是默认今天买入,明天卖出。所以我们能收到的钱也是明天的,今天收不到。dp[ k ]:价格为 k 时,明天所能拥有的最多钱数为dp[ k ]
2024-03-18 19:52:35 1709
原创 洛谷 P1003 讲解(C++)
我们不妨换一个思路,先将 a,b,g,k 储存起来,最后在一个个遍历。但是,细心的读者肯定发现,这道题 a,b,g,k的最大值小于10^5。经过计算,代码的时间复杂度是O(n),最坏遍历次数约为为10^4,不会TLE,空间复杂度。首先,在看到这道题时,最直观的想法就是开一个二维数组,每次遍历一张地毯,并更新二。x,y的最大值为 2*10^5 ,二维数组的大小就是 4*10^10 ,喜提MLE。为O(n),空间为10^4,不会MLE。
2024-03-11 20:18:04 525
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人