尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

HDU-6806:非 DP 做法

HDU-6806:非 DP 做法
📅 发布时间:2026/6/20 0:36:39
这很诡异你知道吗(有时间可能会把 DP 做法补上)

vjudge 链接

点开题目看困了先睡了一觉。

睡醒了阅读一遍题目以为是组合数学吓哭了跑去看别的题了。

回来了之后一秒看出来是 DP,然后花了十五分钟推了个错误的式子,推累了歇了会儿。

真不喜欢写 DP 于是开始乱搞,还真让我搞出来了。

这我高低写篇题解纪念一下,以下是我的科研成果。

思路

首先相邻的单词如果是一样的是不会对答案产生贡献的,所以我们只考虑这个句子中每个相邻单词都不同的小的句子。方便起见,我们定义一个没有两个相同的单词相邻的句子为好句子。

显然这些好句子之间是互不影响的,我们设一个长度为 \(x\) 的好句子产生的答案为 \(f(x)\),一个完整句子的答案就是找出的所有的 \(x\) 的 \(f(x)\) 的乘积,那我们就需要求出 \(f(x)\) 的值。

然后。。。好像不会了。
别急我们先手模两组数据:

input:
4
n o i p
output:
5input:
6
yi yi si wu yi si
output:
8

根据上面的定义,第一个数据的答案就是 \(f(4) = 5\),第二个是 \(f(5) = 8\)。

有些熟悉?这非常斐波那契。

虽然多手模几组就能发现确实如此,但是教练有言曰:棍母。其实我忘了是什么,反正大概意思是结论的证明非常重要,因此我们证明一下。

对于上面的第一个样例,假设我们知道了当 \(x\) 小于 \(4\) 时所有的 \(f(x)\) 值,我们考虑如何用已知值推出当前值。

我们尝试分割,得到 n | o i p。
发现此时的答案就是 \(f(1) * f(x - 1) = f(x - 1)\),很好记录下来。

但是上面的分法遗漏了第一个单词交换的情况,那我们将它变成这样:o n | i p。
左半部分是固定的,我们只计算右半部分,容易发现此时答案是 \(f(x - 2)\)。

整理一下,得到 \(f(x) = f(x - 1) + f(x - 2)\),就是斐波那契数列。

然后我们就完美解决了这道题!

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;const int MN = 1e5 + 3, mod = 1e9 + 7;
int n, ans = 1;
string s[MN];
vector<int> ve;int f[MN];
void f_fir() {f[1] = 1, f[2] = 2;for (int i = 3; i <= n; i++)f[i] = (f[i - 1] + f[i - 2]) % mod;
}signed main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n;f_fir();for (int i = 1; i <= n; i++) cin >> s[i];int tmp = 1;bool fl = 0;for (int i = 2; i <= n; i++) {if (s[i] == s[i - 1]) {if (fl) ve.push_back(tmp), tmp = 1, fl = 0;}else tmp++, fl = 1;}if (fl) ve.push_back(tmp);for (int x : ve) ans = (ans * f[x]) % mod;cout << ans << "\n";return 0;
}

相关新闻

  • 2025年11月连锁酒店加盟品牌推荐榜单:权威分析五大品牌投资价值与选择指南
  • 2025年11月天津网站建设公司排行推荐:针对不同企业需求的深度分析
  • 2025年11月全屋定制品牌客观评价:基于用户反馈与行业数据

最新新闻

  • 如何构建高效的股票智能分析系统:自动化部署与配置指南
  • DeepSeek V4双模架构解析:1M上下文与OPD训练的工程化落地
  • 2026目前最好的数字展厅全彩屏厂家怎么选 - 品牌排行榜
  • 98. 从单核到集群:如何评估与规划服务的QPS承载能力
  • 2026年苏州专攻离婚房产分割的律师选择参考 - 品牌排行榜
  • DeepSeek-V4高效长上下文推理技术解析

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号