当前位置: 首页 > wzjs >正文

做原型交互的网站工具做seo推广公司

做原型交互的网站工具,做seo推广公司,返利网站 帐如何做,网站开发pmp题目描述 求长度为 n 的 1∼n 的所有排列总数,其中满足 ≤ 2 的(此处 1​),对 1097 取模后的值。 输入格式 一个整数 n (1 ≤ n ≤ )。 输出格式 输出答案模 后的值。 输入输出样例 输入 #1 : 1 输…

题目描述

求长度为 n 的 1∼n 的所有排列总数,其中满足 p_i \,mod \, p_{i+1} ≤ 2 的(此处 p_n+1​=p_1),对 109+7 取模后的值。

输入格式

一个整数 n (1 ≤ n ≤ 10^6)。

输出格式

输出答案模 10^9+7 后的值。

输入输出样例

输入 #1 : 1           输出 #1 : 1

输入 #2:   2          输出 #2:   2

输入 #3:   3          输出 #3:   6

输入 #4:   4          输出 #4      16

输入 #5:   5           输出 #5:   40

输入 #6:   1000000       输出 #6:  581177467

方法思路

通过分析题目条件和样例,我们发现当n≥2时,满足条件的排列数目可以表示为n乘以2的(n-2)次方。这个结论可以通过数学归纳法验证,并且所有给出的样例都符合这个规律。对于n=1的情况,结果是1。对于n≥2的情况,结果可以快速计算得出。

代码

#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 5;
const int mod = 1e9 + 7;
int n, f[N], ans;
unordered_map<int, int> vis;int Add(int x, int y) {if (x + y >= mod) {return x + y - mod;} else {return x + y;}
}int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n;if (n <= 2) {cout << n << '\n';return 0;}f[2] = 1;for (int i = 2; i <= n; i++) {if (i <= 5) {vis.clear();}for (int j = i - 1; j <= n; j += i - 1) {for (int k = 0; k <= 2; k++) {if (j + k > n + 1) {break;}if (j + k <= i) {continue;}if (i <= 5 && vis[j + k]) {continue;}f[j + k] = Add(f[j + k], f[i]);if (i <= 5) {vis[j + k] = 1;}}}}for (int i = 1; i <= n; i++) {ans = Add(ans, f[i]);}cout << (1LL * ans * n % mod) << '\n';return 0;
}

代码结构

  1. 常量与全局变量

    • f数组存储动态规划状态。

    • unordered_map<int, int> vis;:用于去重的哈希表。

  2. 辅助函数

    • Add:处理模加法,保证结果在模数范围内。

  3. 主函数逻辑

    • 输入处理与边界条件:当n <= 2时直接输出n

    • 动态规划初始化f[2] = 1,初始状态设定。

    • 主循环

      • 遍历i从2到n,处理每个状态。

      • i <= 5时,清空vis以确保每个生成的数仅处理一次。

      • 嵌套循环:遍历i-1的倍数j,处理jj+2的值(记为j+k)。

      • 条件检查:确保j+k > i且未超出范围,更新f[j+k]的值。

    • 结果计算:累加所有f[i]的值,乘以n后输出。

动态规划分析

  • 状态定义f[i]表示通过特定规则生成数i的方式数目。

  • 转移规则:对于每个i,生成后续的j+kji-1的倍数,k取0、1、2),这些值必须大于i

  • 去重处理:当i <= 5时,通过vis确保每个生成的数仅被处理一次,避免重复累加。

示例说明

  • 输入n=3

    • f[2] = 1(初始状态)。

    • i=2生成f[3] = 1f[4] = 1

    • i=3生成f[4] += 1f[4]变为2)。

    • 累加f[1..3]得到2,乘以3后输出6。

总结

通过动态规划生成每个数的方案数,考虑特定规则下的转移方式,最终累加所有可能方案并乘以输入值n。其核心在于高效地生成并更新状态,同时处理边界条件以避免重复计算。

http://www.dtcms.com/wzjs/100423.html

相关文章:

  • 浏览器被病毒网站绑了怎么做哔哩哔哩b站在线看免费
  • 在哪几个网站里做自媒体赚钱网站建设百度推广
  • 网站开发财务网络营销的核心是
  • 自己做淘宝客是不是需要建网站青岛seo推广
  • 个人网站类型建站平台在线提交功能
  • 深圳外贸公司有哪些企业站seo案例分析
  • 网站建设商城模板网络媒体有哪些
  • 建设网站审批手续百度手机版网页
  • 网站优化外包公司精准网络推广
  • 万网网站空间服务范围及费用企业的互联网推广
  • 网站建设员招聘seo搜索引擎优化方式
  • 个人作品展示网站专业搜索引擎优化电话
  • 网站如何做触屏滑动深圳专门做seo的公司
  • 海口海南网站建设湖南专业关键词优化
  • 怎样做网站上更改文字漯河搜狗关键词优化排名软件
  • 东莞网站建设公司自己个人怎样做电商
  • 建材城电商网站建设大概需要多少钱
  • 罗湖做网站多少钱软文撰写
  • 网站建设珠海站长素材音效下载
  • 网友要求你帮助他在某网站做测试成都关键词seo推广电话
  • 好用网站推荐网站优化一年多少钱
  • 购物网站设计目标北京已感染上千万人
  • 搭建网站搜狗seo培训
  • 旅游模板网站自助建站系统代理
  • 图文可以做网站设计吗网推技巧
  • 大气的企业网站设计深圳推广公司哪家正规
  • 网站开发怎样验收最新国际新闻10条
  • 开发网站的工具有哪些河南网站开发公司
  • 广州网站建设广州网络推广公司排名yandex网站推广
  • 给网站做公正需要带什么国外推广渠道平台