[BZOJ 1801] Chess】的更多相关文章

Link: BZOJ 1801 传送门 Solution: 一眼看过去又像是状压$dp$的经典模型…… 但此题$n,m\le 100$ ,直接跑状压只有50分 此时要发现这道题的特点:每行/列不能放置超过2个 既然每一列只可能有 不选/选1个/选2个 这三种状态,直接记录这三种状态的个数即可 于是设$dp[i][j][k]$为到第$i$行时,有$j$列放置了1个,有$k$列放置了2个的方案数 接下来分五种情况递推就行了 Code: #include <bits/stdc++.h> using…
题目链接:BZOJ - 1801 题目分析 对于50%的数据是可以直接状压 DP 的. 对于100%的数据,使用递推的 DP .(或者这只叫递推不叫 DP ?) 可以发现,每一行和每一列的棋子个数不能超过 2 个. 用 f[i][j][k] 表示前 i 行,有 j 列有 1 个棋子,有 k 列有 2 个棋子的方案数.(有 0 个棋子的列数可以用 m - j - k 得到.) 初始状态 f[0][0][0] = 1: 转移时从第 i - 1 行转移过来,由于一行最多放 2 个棋子,所以可以讨论各种…
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   typedef long long ll;   co…
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法 100%的数据中N,M不超过100 容易发现每行每列最多两个 然后就不会了...看了别人的状态表示: $f[i][j][k]$表示前$i$行有$j$列放了$1$个$k$列放了$2$个 因为只有那些行放了几个影响当前转移 然后转移自己随便写写就行了....注意$j$可能需要减 $1A$啦啦啦…
Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N,M,中间用空格分开. Output 输出所有的方案数,由于值比较大,输出其mod 9999973 Sample Input 1 3 Sample Output 7 HINT 除了在3个格子中都放满炮的的情况外,其它的都可以.100%的数据中N,M不超过10050%的数据中,N,M至少有一个数不超过8…
注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include<cstdio> #include<iostream> using namespace std; const int N=105,mod=9999973; long long n,m,f[N][N][N],ans; int main() { scanf("%lld%lld",&…
1801: [Ahoi2009]chess 中国象棋 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1426  Solved: 826[Submit][Status][Discuss] Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N,M,中间用空格分开. Output 输出所有的方案数,由于值比较大…
标题效果:给定一个棋盘.放置一些枪.它需要随机两支枪不能互相攻击,评估的数目p模值 首先,两炮不攻击对方自由地等同于一条线最多可有只有两个枪 直形压力DP话是50分 考虑到每个列是等效 然后我们就可以直接递归 令f[i][j][k]为前i行有j列有一个炮 k列有两个炮 那么讨论 这行不放炮 方案数为f[i-1][j][k] 在原先没有炮的列放炮 方案数为f[i-1][j-1][k]*(n-j-k+1) 在原先有一个炮的列放炮 方案数为f[i-1][j+1][k-1]*(j+1) 在原先没有炮的两…
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子.你也来和小可可一起锻炼一下思维吧! 40pts 考试遇到了这个题,玄学打表得了\(40pts\) 玄学打表吼啊 xjb分析 正解竟然是个\(DP\)? 还有人说是状压\(DP\)?哪里来的状压啊! 前置知识 考虑到我…
题目:https://jzoj.net/senior/#main/show/1667 首先,一行.一列最多只有 2 个炮: 所以记录一下之前有多少行有 0/1/2 个炮,转移即可: 注意取模!小心在某处爆 int . 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll;…