[蓝桥杯 2014 省 A] 波动数列

news/2024/4/30 6:14:14

容我菜菲说一句,全网前排题解都是rubbish,当然洛谷某些也是litter

不好意思,最近背单词背了很多垃圾的英文,正题开始

[蓝桥杯 2014 省 A] 波动数列

题目描述

在这里插入图片描述

输入格式

输入的第一行包含四个整数 n , s , a , b n,s,a,b n,s,a,b,含义如前面说述。

输出格式

输出一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以 100000007 100000007 100000007 的余数。

样例 #1

样例输入 #1

4 10 2 3

样例输出 #1

2

提示

在这里插入图片描述


思路

假设首项为a1,操作为p,那么 a1 + (a1+p) + (a1+2 * p) + … + [a1+(n-1) * p] = s;
整理式子,得:n*a1 + [p + 2 * p + … + (n-1) * p] = s ;
令K= [p + 2 * p + … + (n-1) * p] ,一共是n-1项
则 a1=(s-K) / n;
也就是说,求s%n==k%n 的个数
那我们就对k=[p + 2 * p + … + (n-1)*p] 当作背包好了

上面看不懂可以转战别人的题解,尊嘟。

一般来说,这个题有两种状态转移,一种反推,一种正推,反正最后的结果看的是余数,小于n的。

这是正推:

dp[i][j]表示,进行第i次+a或-b操作时,整个长度(长度为n-1)的和的余数等于j的方案数
已知前一项(i-1项)的余数为j,求第i项+a,-b的余数;
由于前一项+a,那么后面的每一项都会+a,所以求和就要乘以后面的项数;
同理-b也是。

dp[i][__(j+a*(n-i+1))]+=dp[i-1][__(j)];
dp[i][__(j-b*(n-i+1))]+=dp[i-1][__(j)];

这是反推:(与正推相比,只有状态转移方程不同)

后一项(i+1项)的余数为j,那么肯定是当前项操作后转移过来的。
我们现在把最后一项当第一项看,第一项当最后一项,
那么i就是我们的原来排列的后缀长度,换句话就是,我在这里进行了+a操作,后面(包括当前项)的长度刚好为i,所以有i * a,同理,-b也是。
那么前面的一项就是j-a * i的余数(我想要成为j,是从( j - a * i )+ a * i 变成的)

dp[i][j]=dp[i-1][__(j-a*i)]+dp[i-1][__(j+b*i)];

最后

不要忘记取模,mod=100000007(1e8+7)
因为减法可能会带来负数,所以写了个__()的函数用来取模
反推的代码确实短小精悍,但是能正确理解的不多。我也是问了很多大佬才理解的,某些题解确实garbage,别喷我,喷就是你对
欢迎新的题解出现 ^ v ^ ~

Code

ll dp[1005][1005];ll __(ll x)
{return (x%n+n)%n;
}
void solve()
{ll s,a,b;cin>>n>>s>>a>>b;dp[1][0]=1;for(int i=2;i<=n;i++){for(int j=0;j<n;j++){(dp[i][__(j+a*(n-i+1))]+=dp[i-1][__(j)])%=mod;(dp[i][__(j-b*(n-i+1))]+=dp[i-1][__(j)])%=mod;}}cout<<dp[n][__(s)];
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/11560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

AI如何影响装饰器模式与组合模式的选择与应用

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自热榜文章&#xff1a;设计模式深度解析&#xff1a;AI如何影响…

前端路径问题总结

1.相对路径 不以/开头 以当前资源的所在路径为出发点去找目标资源 语法: ./表示当前资源的路径 ../表示当前资源的上一层路径 缺点:不同位置,相对路径写法不同2.绝对路径 以固定的路径作为出发点作为目标资源,和当前资源所在路径没关系 语法:以/开头,不同的项目中,固定的路径…

星际门计划:微软与OpenAI联手打造未来AI超级计算机

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

CrossOver玩游戏会损害电脑吗 CrossOver玩游戏会卡吗 Mac玩游戏 crossover24免费激活

CrossOver是一款可以在macOS上运行Windows应用程序的软件&#xff0c;它利用了Wine技术&#xff0c;无需安装虚拟机或双系统&#xff0c;可以直接在苹果系统下运行Windows游戏。那么&#xff0c;使用CrossOver玩游戏会损害电脑吗&#xff1f;CrossOver玩游戏会卡吗&#xff1f;…

黑客(网络安全)技术自学——高效学习

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

idea中 错误:找不到或无法加载主类

很神奇的就是maven打包是正常的&#xff0c;本来也是好好的&#xff0c;突然启动就报错了&#xff0c;我百度了很急&#xff0c;没什么结果&#xff0c;找了公司6年工作经验的老员工&#xff0c;还是搞了好久&#xff0c;我站了好久也是没解决。后来我也是在想maven的jar包都能…