Caesar's Legions(CodeForces-118D) 【DP】
题目链接:https://vjudge.net/problem/CodeForces-118D
题意:有n1名步兵和n2名骑兵,现在要将他们排成一列,并且最多连续k1名步兵站在一起,最多连续k2名骑兵站在一起,求方案数。
思路:dp[i][j][res1][res2],表示排好了i人,并且当前最后一个人是j(j=1表示步兵, j=2表示骑兵),res1、res2分别表示步兵、骑兵的剩余数量。
xxmlala:真的贼激动啊,有史以来第一次在比赛中做出来非状态压缩的dp!
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mo=1e8;
long long dp[][][][];
int main(){
int n1,n2,k[];
scanf("%d%d%d%d",&n1,&n2,&k[],&k[]);
memset(dp,-,sizeof(dp));
int kk1=min(k[],n1),kk2=min(k[],n2);
for(int i=;i<=kk1;i++)
dp[i][][n1-i][n2]=;
for(int i=;i<=kk2;i++)
dp[i][][n1][n2-i]=;
for(int j=;j<=n1+n2;j++){
for(int i=;i<=;i++){
int re[];
for(re[]=;re[]<=n1;re[]++)
for(re[]=;re[]<=n2;re[]++){
if(dp[j][i][re[]][re[]]==-)
continue;
int kFlag=min(k[-i],re[-i]);
int kt[]={};kt[-i]=;
for(int jj=;jj<=kFlag&&jj+j<=n1+n2;jj++){
if(dp[jj+j][-i][re[]-kt[]*jj][re[]-kt[]*jj]==-)
dp[jj+j][-i][re[]-kt[]*jj][re[]-kt[]*jj]=;
dp[j+jj][-i][re[]-kt[]*jj][re[]-kt[]*jj]+=dp[j][i][re[]][re[]]%mo;
dp[j+jj][-i][re[]-kt[]*jj][re[]-kt[]*jj]%=mo;
}
}
}
}
long long ans=;
if(dp[n1+n2][][][]!=-)
ans+=dp[n1+n2][][][];
if(dp[n1+n2][][][]!=-)
ans+=dp[n1+n2][][][];
ans%=mo;
printf("%I64d",ans);
return ;
}
Caesar's Legions(CodeForces-118D) 【DP】的更多相关文章
- CodeForces 106C 【DP】
题意: n g dough m种商品? 每种有ai stuffing, 拿bi stuffing + ci dough -> di tugriks rest c0 dough -> d0 ...
- CodeForces 761C 【DP】
总结:能这么DP就这么写! 多练位运算标记. #include<bits/stdc++.h> using namespace::std; const int N=55; const int ...
- Codeforces 358D【DP】
思路: dp[i][0] 代表取的时候左边没有 dp[i][1] 代表取的时候右边没有 dp[i][2] 代表取的时候左右都没有 dp[i][3] 代表取的时候左右都有 然后自己转移吧= =. 注意 ...
- CodeForces 13C【DP】
题意: 给你n个数,每次只能让一个数+1,或者-1,目标是最终使这个序列构成一个非递减的序列: n是5e3,复杂度n^2内.值是1e9: 思路: 可以发现子结构是保证一个区间的非递减, 如果只是dp[ ...
- CodeForces 687C【DP】
题意: 给你n个数,然后让这些数相加组合,然后在这些组合的数里可以再相加组合搞出给定 k,输出这些组合的数. 思路: DP. //在枚举到第i个coin的时,dp[i][j],i 肯定能被a[i]组合 ...
- CodeForces 429B【dp】
题意: 在一个n*m的矩阵中有两只虫子,一只从左上角向右下角移动,另外一只从左下角向右上角移动. 要求: 1.第一只虫子每次只能向左或者向下移动一格,另外一只只能向上或者向右移动一格. 2.两只虫子的 ...
- [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】
[CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1501 Zipper 【DP】【DFS+剪枝】
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
随机推荐
- windows游戏编程地址
本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22309325 作者:jadeshu 邮箱: jades ...
- python 多线程_thread
import _thread import time def print_time(threadName, delay, iterations): start = int(time.time()) , ...
- selenium安装与更新
1.通过pip show selenium 查看是否已经安装过selenium,如果已经安装selenium会显示安装的selenium的版本信息. 如果在使用pip 查看命令报Unknown or ...
- ubuntu 16.04 脚本开机自启动
1.首先编写一个shell脚本文件,例如python_self_start.sh (nohup & 指定后台运行) #!/bin/bash nohup python3 /home/senset ...
- Maven的几种新建项目方式
1. 使用原型创建Maven的java工程 (1) 选择 JDK 的版本,勾选“使用原型创建”,选中 maven-archetype-quickstart,下一步. (2) 填写公司名,填写项目名,修 ...
- 利用csv文件批量编辑更新sql
历史表(popularity_ranking)数据中只存了用户手机号,业务需求中需要新增用户昵称字段, 这里我们用户表和popularity_ranking表在不同数据库中,有两种方法:1.编写后台服 ...
- 组件 computed 与 vuex 中 getters 的使用,及 mapGetters 的使用,对象上追加属性,合并对象
vue 是响应式的数据,这一点相当的方便我们的操作,但有些错误的操作方法会 vue 的响应无效 除此之外我们还要了解 vue.set() 和 Object.assgin() 的使用 vue.set() ...
- kotlin之高阶函数
高阶函数是一种特殊的函数,它接受函数作为参数,或者返回一个函数 import java.awt.geom.Area fun main(arg: Array<String>) { val m ...
- firewalld介绍
(1).什么是firewalld? firewalld是提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具. (2).firewalld与iptables之间的关系 ...
- Java并发编程系列-(7) Java线程安全
7. 线程安全 7.1 线程安全的定义 如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的. 类的线程安全表现为: 操作的原子性 内存的可见性 不 ...