2026/4/18 12:35:34
网站建设
项目流程
校园网站建设费用,上海正规建设网站私人订制,制作图片二维码,seo设置是什么title: 2026-01-20-牛客每日一题-小红删数字 date: 2026-01-20 tags:
算法学习牛客动态规划 题目信息
平台#xff1a;牛客题目#xff1a;小红删数字难度#xff1a;中等题目链接 题目描述
给定长度为 n 的数字序列 a1…an#xff0c;每一步在相邻两个数之间选择加号或…title: 2026-01-20-牛客每日一题-小红删数字date: 2026-01-20tags:算法学习牛客动态规划题目信息平台牛客题目小红删数字难度中等题目链接题目描述给定长度为 n 的数字序列 a1…an每一步在相邻两个数之间选择加号或乘号并对结果取模 10按从左到右的顺序计算。请统计最终结果为 0…9 的方案数对 1e97 取模输出。初步思路从右往左做 DP设cnt[i][v]表示从位置 i 到 n 的子序列最终结果为 v 的方案数。右端初始化cnt[n][a[n]] 1。转移把a[i-1]与cnt[i][*]的结果通过或*合并更新cnt[i-1][*]。算法分析核心右向左 DP枚举每个位置与后缀结果的加法/乘法技巧结果只关心 0…9因此状态数固定为 10时间复杂度O(10n)空间复杂度O(10n)代码实现C#includeiostreamusingnamespacestd;usinglllonglong;constintN2e55;constll MOD1000000007;ll n,t,a[N],cnt[N][10];intmain(){cinn;for(inti1;in;i){cint;if(n1)a[i]t%10;elsea[i]t;// 特判 n 1}cnt[n][a[n]];//初始化,dp的起点for(intin;i1;--i){for(intj0;j10;j){cnt[i-1][(a[i-1]j)%10](cnt[i-1][(a[i-1]j)%10]cnt[i][j])%MOD;cnt[i-1][(a[i-1]*j)%10](cnt[i-1][(a[i-1]*j)%10]cnt[i][j])%MOD;}}for(inti0;i10;i){coutcnt[1][i] ;}return0;}总结与反思结果只和个位相关状态压缩到 10 个值即可。右向左推导能避免重复计算直接统计所有结果分布。