7-1 礼尚往来 (10分)

吉哥还是那个吉哥,那个江湖人称“叽叽哥”的基哥。每当节日来临,女友众多的叽叽哥总是能从全国各地的女友那里收到各种礼物。有礼物收到当然值得高兴,但回礼确是件麻烦的事!无论多麻烦,总不好意思收礼而不回礼,那也不是叽叽哥的风格。现在,即爱面子又抠门的叽叽哥想出了一个绝妙的好办法:他准备将各个女友送来的礼物合理分配,再回送不同女友,这样就不用再花钱买礼物了!假设叽叽哥的n个女友每人送他一个礼物(每个人送的礼物都不相同),现在他需要合理安排,再回送每个女友一份礼物,重点是,回送的礼物不能是这个女友之前送他的那个礼物,不然,叽叽哥可就摊上事了,摊上大事了…现在,叽叽哥想知道总共有多少种满足条件的回送礼物方案呢?

输入格式:

输入数据第一行是个正整数T,表示总共有T组测试数据(T <= 100); 每组数据包含一个正整数n,表示叽叽哥的女友个数为n( 1 <= n <= 100 )。

输出格式:

请输出可能的方案数,因为方案数可能比较大,请将结果对1000000007 取模后再输出。(提示:在递推过程中,不断求余防止数据太大导致数据溢出。) 每组输出占一行。

输入样例:

3
1
2
4

输出样例:

0
1
9

解题

  1. 这题不要盲目去解,一开始我就是这样,结果太复杂了,还写不出通项式,后来重新分析发现是个递推题。
  2. 设dp[n] 就表示n个人的方案
  3. 如下图,共有n个人,第一个位置(A)给除A以外的(n - 1) 人中的其中一人,则可有(n - 1)个选择,余下n - 1人中,有n - 2 人是有重复的,现在先假设这n - 1人全部是有重复的,即假设F = A,那么这n - 1人一共就有dp[n - 1]种方案,显然如果直接这么计算,少算了A 在 F 位置的次数,现在把A直接放在F位置,余下n - 2 个位置,全部是有重复的n - 2 个,即dp[n - 2],综上有:
  4. dp[n] = (n - 1) * (dp[n - 1] + dp[n - 2]); 结果在对p取余即可。

代码

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
const int p = 1000000007;
const int maxn = 102;
ll dp[maxn];int main() {int T, n;dp[1] = 0;dp[2] = 1;for (int i = 3; i < maxn; i++) {dp[i] = (i - 1LL) * (dp[i - 1] + dp[i - 2]) % p;}cin >> T;// for (int i = 1; i <= T; i++) {//     cout << i << " " << dp[i] << endl;// }while (T--) {cin >> n;cout << dp[n] << endl;}system("pause");return 0;
}

PTA 礼尚往来(递推)相关推荐

  1. PTA—— 递归 递推

    个人名片: 博主:酒徒ᝰ. 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来. 专栏:PTA习题及解析 介绍:记录了博主在pta学习练题的一些方法与笔记. 目录 前言 1.简介 2.优点 一.题目 ...

  2. OJ《程序设计基础II》实验3——递推

    3-1 A - 养兔子 #include<stdio.h> int main() {int n,i;scanf("%d",&n);long long a[111 ...

  3. P1541 乌龟棋 题解(洛谷,动态规划递推)

    题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...

  4. 基础算法整理(1)——递归与递推

    程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一 ...

  5. hdu 5366 简单递推

    记f[i]为在长度是i的格子上面至少放一个木桩的方法数.考虑第i个格子,有放和不放两种情况. 1.如果第i个格子放了一个木桩,则i - 1和i - 2格子上面不能放木桩,方案数为:f[i - 3] + ...

  6. 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Stations(概率期望,递推前缀和优化)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 第十一届山东省大学生程序设计竞赛 L. Construction of 5G Base Station ...

  7. 2019 ICPC Asia Nanjing Regional C.Digital Path(拓扑排序递推DP)

    整理的算法模板合集: ACM模板 题目传送门 三段题面,只有第三段是有用的-前两段又长单词又难懂,就是在讲故事...不过针对四种情况给出四个图帮助我们理解题意是真的赞,可能出题人怕我们看不懂吧(第一句 ...

  8. P6134 [JSOI2015]最小表示(拓扑排序递推 + bitset优化,可达性统计变种)

    整理的算法模板合集: ACM模板 P6134 [JSOI2015] 题目要求删除一条边整个图的连通性是不受影响的,也就是说如果我们要删除边(x,y)(x,y)(x,y),删除以后整个图的连通性不受影响 ...

  9. 解题报告:NOIP2013 车站分级(拓扑序递推求解差分约束、建图优化O(n+m)) 超详细讲解

    本题是2013年NOIP普及组的压轴题 差分约束裸题. 计算当前线路中最小的级别(比较始发站和终点站). 整条线路中所有大于这个级别的都必须停靠 所有未停靠的站点的级别一定小于这个级别 也就是说所有未 ...

最新文章

  1. 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
  2. 软考高项之沟通与干系人管理-背诵记忆
  3. 索引处理类的设计与实现
  4. NB-IOT的优势体现在哪些方面
  5. 菜鸟教程php多久学完,十天学会php(1)
  6. 秘密武器 | 看AnalyticDB如何强力支撑双十一
  7. RPC的负载均衡策略
  8. 写几个函数 输入10个职工的姓名和职工号_Excel函数速查一览表-函数应用案例-信息统计(2)...
  9. VPP 安装配置工具vpp-config
  10. 编程语言-初学者常见的几个问题
  11. getchar() 和 scanf(%c)的区别
  12. 100UF50V 10*8.4贴片电解电容封装尺寸
  13. c语言皮尔森系数程序,皮尔森相关系数(Pearson correlation coefficient)-Go语言中文社区...
  14. mysql数据库密码怎么修改_MySQL数据库密码如何修改?
  15. uni-app 创建新页面和页面的配置
  16. 赛科尔亚洲招聘Axapta顾问
  17. 怎么区别业务架构、软件架构、系统架构、解决方案架构、企业架构?
  18. 单片机软件设计架构(C语言)
  19. sql根据指定符号拆分字符串表函数
  20. jfinal批量操作

热门文章

  1. 【哈希表】(一) 设计哈希表
  2. JBDC[mysql][java]
  3. 账号已被停用,请咨询系统管理员
  4. comsol动网格(als)帮助文档翻译
  5. Android高德地图的定位
  6. linux命令--dmesg
  7. 什么是服务器托管?服务器托管和虚拟主机的区别
  8. 如何合并视频?教你把多个视频合并成一个视频
  9. 云重磅 |央视专访任正非;拼多多被薅上亿羊毛;甲骨文对云未来的10项技术预测...
  10. 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法...