AtCoder Beginner Contest 307「E dp」

news/2024/6/15 23:36:45 标签: 算法, 动态规划

E - Distinct Adjacent

题目描述:

给两个数n和m,求一个长度为n的排列的数量,排列要满足如下条件:

  • a[i] >= 0 && a[i] <= m,即a[i]可以是0到m-1中任意的一个数
  • 任意相邻数字不能相等,同时a[1]不能等于a[n]

答案对998244353取模

思路:

假设没有a[1]!=a[n]的条件,那答案就是m*(m-1)n-1

有了这个限制条件以后,我们可以用dp来解决

dp[i][0]表示第i个数和第一个数字不相同时,前i个数字中任意相邻的两个数字不相同的方案数

dp[i][1]表示第i个数和第一个数字相同时,前i个数字中任意相邻的两个数字不相同的方案数

则状态转移为:

dp[i][0]=dp[i-1][0]*(m-2)+dp[i-1][1]*(m-1)

dp[i][1]=dp[i-1][0]

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

typedef long long ll;
ll mod = 998244353;
#define MAX 1000050
ll n, m, k, x, y, z;
ll dp[MAX][2];

int main(){
    scanf("%lld%lld", &n, &m);
    dp[1][0] = 0;dp[1][1] = m;
    for(int i = 2; i <= n; ++i){
        dp[i][0] = (dp[i-1][0] * (m-2) % mod + dp[i-1][1] * (m-1) % mod)%mod;
        dp[i][1] = dp[i-1][0];
    }
    printf("%lld\n", dp[n][0]);
    return 0;
}

http://www.niftyadmin.cn/n/1671237.html

相关文章

003 代码开发

2019独角兽企业重金招聘Python工程师标准>>> 代码已开源&#xff0c;源代码可从github下得到&#xff0c;地址为 https://github.com/Juneve/DouDiZhu.git 。 主要说一下两个地方的设计思路&#xff0c;他们都采用了策略模式。 一个是CardGroup中内置的排序规则&…

暗备用的运行状态_电力系统自动装置随堂练习

1.(单选题)电力系统的自动装置的主要作用是(),保证电网的安全运行、稳定运行和经济运行。A&#xff0e;对电力系统进行监视。B&#xff0e;对电力系统进行控制。C&#xff0e;对电力系统进行保护。D&#xff0e;对电力系统及其设备进行监视、控制、保护和信息传递。参考答案&am…

安卓 -- 判断网络是否可用

/*** to judge if the net is available* 用户手机当前网络可用&#xff1a;WIFI、2G/3G/4G网络;* 用户打开与不打开网络&#xff0c;和是否可以用是两回事&#xff0c;打开了未必就可以上网*/public static boolean isNetworkAvailable(Context context) {ConnectivityManager…

markdown引入代码_Markdown 插入代码

使用Markdown为写作带来极大便利&#xff0c;当你遇到需要向国外朋友发送文件时&#xff0c;使用word就不合适&#xff0c;word在不同系统中可能遇到打开出现乱码的情况&#xff0c;这时候你需要使用全球通用的【标记语言】&#xff0c;也就是Markdown来完成写作过程&#xff0…

linux telnet脚本命令大全,Linux telnet命令的使用

1.简介telnet命令用于登录远程主机&#xff0c;是基于Telnet协议的远程登录程序&#xff0c;对远程主机进行管理。telnet因为采用明文传送报文&#xff0c;安全性不好&#xff0c;很多Linux服务器都不开放telnet服务&#xff0c;而改用更安全的ssh方式了。但仍然有很多别的系统…

Verlet-js JavaScript 物理引擎

subprotocol最近在Github上开源了verlet-js。地址为https://github.com/subprotocol/verlet-js。verlet-js是一个集成Verlet的物理引擎&#xff0c;利用JavaScript编写。verlet-js支持粒子系统、距离限制、角度限制等。其Github声称基于这些基础&#xff0c;则可以帮助我们构建…

2014年中国新闻业年度观察报告

随着互联网的迅猛发展&#xff0c;新闻网站正成为我国媒介版图中的重要组成部分。许多受众不再是通过传统媒体、而是通过新闻网站获取新闻。根据中国互联网络信息中心&#xff08;CNNIC&#xff09;2014年1月发布的调查数据[ii]&#xff0c;网络新闻是网民排名第二的网络应用&a…

linux系统查看系统配置命令是什么,Linux查看系统配置常用命令

Linux查看系统配置常用命令# uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo # 查看CPU信息# hostname # 查看计算机名# lspci -tv # 列出所有PCI设备# lsusb -tv # 列出所有USB设备# lsmod # 列出加载的内核模块# env # …