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

CF1515E Phoenix and ComputersAC代码+详细注释

CF1515E Phoenix and ComputersAC代码+详细注释

#include <iostream>
using namespace std;const int N = 410;  // 最大电脑数量
typedef long long ll;int f[N][N];  // 动态规划数组,f[i][j]表示处理到第i台电脑,当前有j个连续段(手动打开电脑的连续段)的方案数int main(){int n, mod;cin >> n >> mod;f[0][0] = 1;  // 初始状态:没有电脑时,有0个连续段,方案数为1// 动态规划过程for(int i = 0; i < n; i++)  // 枚举当前已处理的电脑数for(int j = 0; j <= i; j++){  // 枚举当前连续段的数量if(!f[i][j]) continue;  // 如果当前状态不可达,跳过// 情况1:新开一个连续段(单独打开一台电脑)// 新段可以插入到j+1个位置(j个段之间有j+1个空隙)(f[i+1][j+1] += (ll)f[i][j] * (j+1) % mod) %= mod;// 情况2:在当前某个连续段的一端扩展// 有j个段,每个段有左右两端可以扩展,所以乘以2j(f[i+1][j] += 2ll * f[i][j] * j % mod) %= mod;// 情况3:扩展连续段,但跳过中间一台电脑(形成间隔扩展)// 这种情况也会保持连续段数量不变(f[i+2][j] += 2ll * f[i][j] * j % mod) %= mod;// 情况4和5需要至少2个连续段才能进行if(j >= 2){// 情况4:连接两个相邻的连续段// 有j-1个空隙可以连接,每个空隙有2种连接顺序(f[i+2][j-1] += 2ll * f[i][j] * (j-1) % mod) %= mod;// 情况5:连接两个连续段,但中间跳过一台电脑// 有j-1个空隙可以这样操作(f[i+3][j-1] += (ll)f[i][j] * (j-1) % mod) %= mod;}}// 最终答案:所有电脑处理完,只剩下1个连续段的方案数cout << f[n][1];return 0;
}

http://www.dtcms.com/a/475730.html

相关文章:

  • 相亲网站建设关键网站上传用什么软件做视频教程
  • 免费中学网站模板wordpress邀请有奖
  • 网站被降权了怎么办企业wap网站模板
  • 学院实训云上搭建集群
  • 潍坊设计网站建设wordpress 调查表 图片
  • 北流网站建设制作重庆ppt制作
  • 大型营销型网站制作南昌做网站需要多少钱
  • 简洁大气企业网站模板中国建设银行网站的发展
  • 个人建个网站需要多少钱最好的购物网站
  • 怎么自己做直播网站吗学校网站建设评比
  • 长治网站制作公司网站建设 入账
  • 东莞网站建设上科电脑云主机
  • 网站开发外包售后维护合同范本wordpress 充值积分
  • 嵌入式软件开发和硬件开发seo优化网站
  • ATA存储通信协议
  • 购物网站建设过程上海外贸商品交易会
  • Open CASCADE:模型带颜色导出至 STEP / IGES 文件
  • 电力建设监理招聘网站网站模板套餐
  • 东莞网站高端建设WordPress万级数据优化
  • 网站内容资源建设ps设计师网站
  • 源代码建网站如何用wordpress盈利
  • 销售型企业网站建设营销网站的目的
  • 网站开发有什么软件做网站会被捉吗
  • Controller中常见的一些注解
  • 中职网站建设与管理达州注册公司
  • 手机网站开发 视频wordpress 导出html5
  • 江西省网站建设公司网站排名首页前三位
  • 进程 线程八股思考
  • 网站添加百度地图标注个人网页制作教程代码
  • 网站设计答辩ppt高端网站建设哪家公司好