【Codeforces 118B】Caesar's Legions
【链接】 我是链接,点我呀:)
【题意】
序列中不能连续出现k1个以上的1以及不能连续出现k2个以上的2,然后一共有n1个1以及n2和2,要求这n1+n2个数字都出现.
问序列有多少种可能.
【题解】
这题其实可以转化一下思路。
看成是两个人在轮流给空串后面添加1,2字符串。
第一个人添的是重复的"1",第二个人是重复的"2"
然后第一个人添加的"1"的个数不能超过k1,第二个人添加的"2"("1")的个数不能超过k2.
直到填满为止.
这样第一个人能添加的个数为1..k1之间,第二个人能添加的个数也为1..k2之间.
一个dp的雏形就诞生了。
dp[i][j][p]表示1还剩i个,2还剩j个,然后现在轮到 p=0?第一个人添加:第二个人添加 的方案数目.
(同一个状态可以包括多个字符串,但是不影响)
逆序枚举i,j然后i-l,j,1-p和i,j-l,1-p就分别表示下一个状态了.
(逆序枚举i,j的话,能保证当前算出来的i,j是最终的i,j不是中间结果)
最后输出dp[0][0][0]+dp[0][0][1]就Ok
【代码】
import java.util.Scanner;
public class Main {
public static int N = 100;
public static int MOD = 100000000;
public static int n1,n2,k[];
public static int dp[][][];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
dp = new int[N+5][N+5][2];
k = new int[2];
n1 = in.nextInt();n2 = in.nextInt();k[0] = in.nextInt();k[1] = in.nextInt();
dp[n1][n2][0] = dp[n1][n2][1] = 1;
for (int i = n1;i >= 0;i--)
for (int j = n2;j >= 0;j--) {
for (int l = 1;l <= k[0];l++)
if (i-l>=0)
dp[i-l][j][1] = (dp[i-l][j][1] + dp[i][j][0])%MOD;
for (int l = 1;l <= k[1];l++)
if (j-l>=0)
dp[i][j-l][0] = (dp[i][j-l][0] + dp[i][j][1])%MOD;
}
int ans = (dp[0][0][0] + dp[0][0][1])%MOD;
System.out.println(ans);
}
}
【Codeforces 118B】Caesar's Legions的更多相关文章
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
- 【Codeforces 429D】 Tricky Function
[题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...
- 【Codeforces 670C】 Cinema
[题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...
- 【codeforces 515D】Drazil and Tiles
[题目链接]:http://codeforces.com/contest/515/problem/D [题意] 给你一个n*m的格子; 然后让你用1*2的长方形去填格子的空缺; 如果有填满的方案且方案 ...
随机推荐
- java使用poi读取doc和docx文件(maven自动导入依赖包)
java使用poi读取doc和docx文件(maven自动导入依赖包) 于是在网上搜寻了一阵之后才发现原来doc文档和excel一样不能用普通的io流的方法来读取,而是也需要用poi,于是进行了一番尝 ...
- WCF Odata 开放数据协议应用
OData简介 说起 WCF Data Service ,不得不说的是 OData.对于一个标准的 Web 服务,它往往会提供了一些功能,比如说:订货.退货这些,然后使用者通过HTTP协议来使用这些功 ...
- Scala 是一门怎样的语言,具有哪些优缺点?
保罗·格雷厄姆在<黑客与画家>中写道,Java属于B&D(捆绑与束缚)类型的语言.为何束缚手脚?因为要让新手和明星程序员写出类似质量的代 码,尽可能的抹消人的才华对程序的影响.不同 ...
- Android 数据库
官方文档:https://developer.android.com/training/basics/data-storage/databases.html#WriteDbRow 原帖:http:// ...
- Oracle数据库初学者入门教程
Oracle数据库是相对于其他数据库来说比较难的一个.Oracle Database,又名Oracle RDBMS,简称Oracle.是甲骨文公司推出的一款关系数据库管理系统.Oracle数据库系统是 ...
- 在chrome里模拟调试微信浏览器
开发者模式(下面有配图): 开发者模式/DevTools.More tools/Network conditions/User agent/ Custom/安卓或ios代理配置配置 更改User ag ...
- python自动化测试学习笔记-6urllib模块&request模块
python3的urllib 模块提供了获取页面的功能. urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capat ...
- hihocode 编程练习赛17
1. f1 score 首先了解f1 score的计算方法, 我记得是学信息检索知道的, 然后简单处理就行. 由于我写的比较麻烦, 中间处理过程引入了一些除数为0的情况,导致错了很多次.其实是很简单的 ...
- 怎么在windows上安装 ansible How to install ansible to my python at Windows
答案是不能再window上安装,答案如下: It's back! Take the 2018 Developer Survey today » Join Stack Overflow to learn ...
- 转 使用Hibernate操作数据库时报:No CurrentSessionContext configured! 异常
没有currentSession配置错误,即在我们使用currentSession的时候要在hibernate.cfg.xml中进行相关的事务配置:1.本地事务<property name=&q ...