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

常州网站建设哪家好网络服务器多少钱一台

常州网站建设哪家好,网络服务器多少钱一台,网站如何做首面关键词,网站备案多久一次题目描述 给定一个 01 01 01序列 a 1 a 2 … a n , a i ∈ { 0 , 1 } a_1a_2\ldots a_n,a_i\in \{0,1\} a1​a2​…an​,ai​∈{0,1} 我们可以修改该序列的任意一个数字,可以将 0 0 0变成 1 1 1,也可以将 1 1 1变成 0 0 0,注意不能删除或增…

题目描述

给定一个 01 01 01序列 a 1 a 2 … a n , a i ∈ { 0 , 1 } a_1a_2\ldots a_n,a_i\in \{0,1\} a1a2an,ai{0,1}

我们可以修改该序列的任意一个数字,可以将 0 0 0变成 1 1 1,也可以将 1 1 1变成 0 0 0,注意不能删除或增加数字。

请问,修改不超过 k k k个数字能让给定的序列中不含有特定的一个子串 110 110 110的方案数有多少种,由于答案很大输出对 998244353 998244353 998244353以后的结果即可。

格式:

输入格式:

第1行2个整数 n , k n,k n,k,表示 01 01 01序列的长度和最多可修改的数字个数。

第2行 n n n个字符 a 1 a 2 … a n , a i ∈ { 0 , 1 } a_1a_2\ldots a_n,a_i\in \{0,1\} a1a2an,ai{0,1}

输出格式:

输出 1 1 1行,表示修改不超过 k k k个数字让给定的序列中不含有 110的方案数对 998244353 998244353 998244353以后的结果。

样例 1

输入

5 2

11000

输出

8

备注

【样例部分数据解释】

共有01000,10000,00000,10100,10010,10001,01001,01010这几种情况。

【数据范围】

对于全部数据满足 1 ≤ n ≤ 5000 , 0 ≤ k ≤ 5000 1\le n\le 5000,0\le k \le 5000 1n5000,0k5000

AC代码及其注释

import java.util.Scanner;public class Main {public static void main(String[] args) {int mod = 998244353;Scanner sc = new Scanner(System.in);// 序列的长度int n = sc.nextInt();// 可修改的次数int k = sc.nextInt();String str = sc.next();char[] strChar = str.toCharArray();sc.close();// 3种状态,0:0结尾(000,010,100,110(x)),1:1(001,101),2:11(011,111),其实还可以设一个不合法状态,但感觉用不上int[][][] dp = new int[n + 2][k + 1][3];dp[0][0][0] = 1;
//        dp[0][0][1] = 1;
//        dp[0][0][2] = 1;for (int i = 1; i <= n; i++) {for (int j = 0; j <= k; j++) {if (strChar[i - 1] == '0') {// 为0// 先不改dp[i][j][0] = (dp[i][j][0] + (dp[i - 1][j][0] + dp[i - 1][j][1]) % mod) % mod;// 改的方案数,此时当前值为1// 01if (j >= 1) {dp[i][j][1] = (dp[i][j][1] + dp[i - 1][j - 1][0]) % mod;// 11或者111,其实都一样dp[i][j][2] = (dp[i][j][2] + (dp[i - 1][j - 1][1] + dp[i - 1][j - 1][2]) % mod) % mod;}} else {// 此时为1// 先不改// 01dp[i][j][1] = (dp[i][j][1] + dp[i - 1][j][0]) % mod;// 11或者111dp[i][j][2] = (dp[i][j][2] + (dp[i - 1][j][1] + dp[i - 1][j][2]) % mod) % mod;// 改的方案数if (j >= 1) {dp[i][j][0] = (dp[i][j][0] + (dp[i - 1][j - 1][0] + dp[i - 1][j - 1][1]) % mod) % mod;}}}}long result = 0;for (int i = 0; i <= k; i++) {result = (result + ((dp[n][i][0] + dp[n][i][1])%mod + dp[n][i][2])%mod)%mod;}System.out.println(result);}}

当然,如果上述代码不好理解,我们也可以分多几个状态进行讨论,下面给出了基于8个状态进行讨论的代码:

import java.util.Scanner;public class Main {public static void main(String[] args) {int mod = 998244353;Scanner sc = new Scanner(System.in);// 序列的长度int n = sc.nextInt();// 可修改的次数int k = sc.nextInt();String str = sc.next();char[] strChar = str.toCharArray();sc.close();// 现在我们分8种情况// 0:000// 1:001// 2:010// 3:011// 4:100// 5:101// 6:110(该情况不合法,不予考虑)// 7:111int[][][] dp = new int[n + 2][k + 1][8];dp[0][0][0] = 1;
//        dp[0][0][1] = 1;
//        dp[0][0][2] = 1;for (int i = 1; i <= n; i++) {for (int j = 0; j <= k; j++) {if (strChar[i - 1] == '0') {// 为0// 先不改// 处理以0结尾的// 000的方案数,应该是之前以00结尾的方案之和dp[i][j][0] = (dp[i][j][0] + (dp[i - 1][j][0] + dp[i - 1][j][4]) % mod) % mod;// 010的方案数,应该是之前以01结尾的方案之和dp[i][j][2] = (dp[i][j][2] + (dp[i - 1][j][1] + dp[i - 1][j][5]) % mod) % mod;// 100的方案数,应该是之前以10结尾的方案之和,其中dp[i - 1][j][6]不合法,不进行统计dp[i][j][4] = (dp[i][j][4] + dp[i - 1][j][2]) % mod;// dp[i][j][6]不合法,不统计// 改的方案数,此时当前值为1// 处理以1结尾的if (j >= 1) {// 001的方案数,应该是之前以00结尾的方案之和dp[i][j][1] = (dp[i][j][1] + (dp[i - 1][j - 1][0] + dp[i - 1][j - 1][4]) % mod) % mod;// 011的方案数,应该是之前以01结尾的方案之和dp[i][j][3] = (dp[i][j][3] + (dp[i - 1][j - 1][1] + dp[i - 1][j - 1][5]) % mod) % mod;// 101的方案数,应该是之前以10结尾的方案之和dp[i][j][5] = (dp[i][j][5] + dp[i - 1][j - 1][2]) % mod;// 111的方案数,应该是之前以11结尾的方案之和dp[i][j][7] = (dp[i][j][7] + (dp[i - 1][j - 1][3] + dp[i - 1][j - 1][7]) % mod) % mod;}} else {// 先不改// 此时为1// 处理以1结尾的// 001的方案数,应该是之前以00结尾的方案之和dp[i][j][1] = (dp[i][j][1] + (dp[i - 1][j][0] + dp[i - 1][j][4]) % mod) % mod;// 011的方案数,应该是之前以01结尾的方案之和dp[i][j][3] = (dp[i][j][3] + (dp[i - 1][j][1] + dp[i - 1][j][5]) % mod) % mod;// 101的方案数,应该是之前以10结尾的方案之和dp[i][j][5] = (dp[i][j][5] + dp[i - 1][j][2]) % mod;// 111的方案数,应该是之前以11结尾的方案之和dp[i][j][7] = (dp[i][j][7] + (dp[i - 1][j][3] + dp[i - 1][j][7]) % mod) % mod;// 改的方案数if (j >= 1) {// 处理以0结尾的// 000的方案数,应该是之前以00结尾的方案之和dp[i][j][0] = (dp[i][j][0] + (dp[i - 1][j - 1][0] + dp[i - 1][j - 1][4]) % mod) % mod;// 010的方案数,应该是之前以01结尾的方案之和dp[i][j][2] = (dp[i][j][2] + (dp[i - 1][j - 1][1] + dp[i - 1][j - 1][5]) % mod) % mod;// 100的方案数,应该是之前以10结尾的方案之和,其中dp[i - 1][j][6]不合法,不进行统计dp[i][j][4] = (dp[i][j][4] + dp[i - 1][j - 1][2]) % mod;}}}}long result = 0;// 问的不大于修改数k的方案数for (int i = 0; i <= k; i++) {result = (result + (((((((dp[n][i][0] + dp[n][i][1]) % mod + dp[n][i][2]) % mod + dp[n][i][3]) % mod + dp[n][i][4]) % mod + dp[n][i][5]) % mod + dp[n][i][7]) % mod)) % mod;}System.out.println(result);}}

参考资料:

https://www.matiji.net/exam/brushquestion/4/4498/F16DA07A4D99E21DFFEF46BD18FF68AD

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

相关文章:

  • 网络公司经营范围能写建材吗seo对网络推广的作用是
  • 找人制作网站 优帮云优化网站关键词
  • net和cn哪个做网站好怎么营销一个产品
  • 苏州交友网站建设山西百度查关键词排名
  • 深圳网站优化建设查询域名网站
  • 做网站咨询cnzz
  • 美食网站开发步骤展示型网页设计公司
  • 厦门市网站建设app开发免费发布推广信息的b2b
  • 如何查看网站做没做竞价宁波网络推广优化方案
  • wordpress cmd关键词seo排名怎么选
  • 谷歌网站流量统计关键词的选取原则有
  • 有做网站看病的吗sq网站推广
  • 广州知名网站建设性价比高关键词分析软件
  • 蚂蚁分类信息网站建设网络公司网页设计
  • 动态web网站怎么做seo外链网
  • 本地高端网站建设信息大全安卓手机优化软件哪个好
  • 如何做网站里的子网站网络科技公司
  • 学生作业制作网站北京seo优化推广
  • android下载安装官方免费下载优化关键词排名软件
  • 我要建设一个网站谷歌浏览器安卓版
  • 怎么引导做淘宝的客户做官方网站网络优化是做啥的
  • 网页设计作业文件夹压缩包建站合肥网络公司seo
  • 做网站用什么团建营销策划主要做些什么
  • 护士首次注册网站关键词快速优化排名软件
  • 做公司网站,哪个程序用的多seo文章排名优化
  • 陕西省建设银行网站6化妆培训
  • 国际网站怎么做网站收录一键提交
  • 建筑网站资料排行榜韩国日本比分
  • 网站 备案 拍照深圳关键词推广优化
  • 聊城找个人做网站永久免费客服系统