首页 > TAG信息列表 > Ahoi2009

NC19885 [AHOI2009]CHESS 中国象棋

题目链接 题目 题目描述 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮。 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧.一个炮要能攻击另一个炮他们必须要处于同一行或者一列且他们之间有且仅有一个棋子. 输入描述 一行包含两个整数N,M

P4127 [AHOI2009]同类分布 题解

题面 罕见的数位dp好题。 首先感觉这个题想数位dp有点困难,很多东西都在变。注意到每个数位数字和其实最大也才一百多,考虑枚举这个和,统计被这个和整除且数位和等于这个和的数的个数就完事了。 点击查看代码 #include<iostream> #include<cstdio> #include<cstring> typedef long l

[AHOI2009]中国象棋 题解

Statement [P2051 AHOI2009]中国象棋 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Solution 显然的性质是,同一行列不能放两个以上的棋子 问题在于如何处理行列的关系,不妨把行拎出来考虑 假设我们正在填写第 \(i\) 行,发现我们只需要知道有多少个列没有填,多少个列填了一个,多少个

[AHOI2009]中国象棋(计数dp)

题意 给定 \(n\) 行 \(m\) 列的棋盘,要求放若干个炮(可以是 \(0\) 个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。\((n, m\le 100)\) 题解 依次考虑每一行放哪些棋子,显然每一行最多放两个,所以可以讨论这 \(0\) ~ \(2\) 个棋子放置的位置。 而其实只需要知道这两个棋子放

P4127 [AHOI2009]同类分布 数位dp + 对状态剪枝

传送门 文章目录 题意:思路: 题意: 思路: 比较套路的题,首先也有个明显的状态 f [ p o s ]

luogu P2051 [AHOI2009]中国象棋

题面传送门 还好的一道题吧。 首先显然可以状压dp 然而我们发现我们根本不需要知道这个的具体的情况,换而言之,两列交换对是否可以没有影响。 所以我们可以设\(f_{i,j,k}\)为\(i\)行\(j\)个列\(1\)个,\(h\)个列两个,转移时分类讨论一下即可。 时间复杂度\(O(nm^2)\) code: #include<cs

[AHOI2009]最小割

题意 给定一个带权有向图,对每条边回答: 是否可能出现在最小割中,是否必定出现在最小割中 n<=4000,m<=60000 Solution 根据网络流最大流的性质,可得出结论: 对于最小割中两种边: 可行边: 1.必定满流 2.残量网络中两端不连通 必经边: 1.一定是可行边(有可行边的两条性质) 2.残量网

P2051 [AHOI2009]中国象棋

大致题意 给一个\(n×m\)的棋盘,在上面放若干个炮,求有多少种放置方法可以使没有一个炮可以攻击到另一个炮 分析 状压\(dp\) 观察发现,每行和每列至多只能放\(2\)个棋子 考虑到每列中已经摆放的棋子数量会影响到之后能摆放的棋子数,不妨设: \(f[i][j][k]\)为前\(i\)行中,一共有\(j

[数位DP][AHOI2009] Luogu P4127 同类分布

最后开long long过了, 心累, 摸了, 明天再写 # include <iostream> # include <cstdio> # include <cstring> # define LL long long # define MAXN 22 using namespace std; int sum, a[MAXN]; // sum 记录各个位数的和 // a[0]记录当前数的总位数, 后面依次记录位 LL f[MAXN

洛谷 P4126 [AHOI2009]最小割

A,B两个国家正在交战,其中A国的物资运输网中有\(N\)个中转站,\(M\)条单向道路。设其中第\(i (1≤i≤M)\)条道路连接了\(v_i,u_i\)两个中转站,那么中转站\(v_i\)可以通过该道路到达\(u_i\)中转站,如果切断这条道路,需要代价\(c_i\)。 现在B国想找出一个路径切断方案,使中转站\(s\)不能到

[AHOI2009]中国象棋

AHOI 题意求在$ncdot m​$的棋盘上摆放一些炮,使得任意两个炮不能互相攻击的方案数 题解对于每一列,显然只能有0或1或2个炮,这是列中不能攻击的充要条件 令$f_{i,j,k}$为考虑前i行,其中有j列有1个炮,k列有两个炮的方案数,这也意味着有$m-i-j$列没有放棋子 分当前行放0或1或2个棋子

洛谷P2051 [AHOI2009]中国象棋

题目 运用数学知识递推。定义\(DP[i][j][k]\)为前i行内选择j个列只有一个炮,k列只有两个炮的放置方案总数。 因为如果有一列或者一行的炮大于等于三时,必会有一个炮会被攻击到,所以可以用一个和两个来区分,方便递推。这样可以使的列里面的炮不会大于等于三,然后考虑行,这一行内只能放两

P4127 [AHOI2009]同类分布

#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <vector> #include <map> #include <queue> #define int long long using namespace std ; int read() { int x = 0 ;bool f = 1

洛谷 P2023 [AHOI2009]维护序列

题目传送门 解题思路: 一道线段树模板题,没啥好说的.qwq AC代码: 1 #include<cstdio> 2 #include<iostream> 3 4 using namespace std; 5 6 long long n,m,p; 7 long long a[100001]; 8 struct kkk { 9 long long v,mul,add; 10 }e[400005]; 11 12 inline void

[AHOI2009]同类分布

题目描述 给出两个数a,b,求出[a,b]中各位数字之和能整除原数的数的个数。 输入格式 一行,两个整数a和b 输出格式 一个整数,表示答案 输入输出样例 输入 #1 10 19 输出 #1 3 说明/提示 对于所有的数据,1≤a≤b≤10181 ≤ a ≤ b ≤ 10^{18}1≤a≤b≤1018 【解题思路】

AHOI2009 最小割

题目链接:戳我 题目就是两问,一问是求所有最小割方案中出现至少一次的边(可能割边),一问是求所有最小割方案中一定会出现的边。 其实对于这个问题,我们有结论—— 1.跑一遍网络流之后,对残量网络做SCC,满流且边的两个端点不在同一个SCC中的边是可能割边。 2.跑一遍网络流之后,对残量网络做SC

P4126 [AHOI2009]最小割(网络流+tarjan)

P4126 [AHOI2009]最小割 边$(x,y)$是可行流的条件: 1.满流;2.残量网络中$x,y$不连通 边$(x,y)$是必须流的条件: 1.满流;2.残量网络中$x,S$与$y,T$分别连通 现在的问题是怎么判断点之间是否连通 我们可以在残量网络上跑tarjan,处理出强连通分量 如果两点同属一个强连通分量,那么它们之间就

BZOJ1799: [Ahoi2009]self 同类分布——数位dp

题目 【题目描述】给出 $ a,b $,求出 $ [a,b] $ 中各位数字之和能整除原数的数的个数。【输入格式】输入只有一行,包含两个正整数 $ a,b $。 【输出格式】输出只有一行,包含一个整数,表示答案。 【样例输入】10 19【样例输出】3【数据范围与提示】对于 $ 10 \% $ 的数据,$ a,b \leq 10^

1797: [Ahoi2009]Mincut 最小割

1797: [Ahoi2009]Mincut 最小割 链接 分析:    代码: #include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<cmath>#include<cctype>#include<queue>#include<vector>#include<set>#include<ma

P2051 [AHOI2009]中国象棋[线性DP]

最近智商有点不在线。其实一直不在线。 题目 先是想用$f[i][j][k][0/1/2]$表示摆了i行时有j列空着,k列有了一个炮,且当下摆了0/1/2个的状态,转移方程写的出来但是极其繁琐。于是又设法听取评讲者题解修改状态,最后的012完全可以删去。那么仍可以表示这一行那些列摆过1个,那些列摆过0个

洛谷 P4127 [AHOI2009]同类分布 解题报告

P4127 [AHOI2009]同类分布 题目描述 给出两个数\(a,b\),求出\([a,b]\)中各位数字之和能整除原数的数的个数。 说明 对于所有的数据,\(1 ≤ a ≤ b ≤ 10^{18}\) 数位dp 枚举被mod的数,\(dp_{i,j,k}\)表示前\(i\)位和为\(j\)模后为\(k\)的数的个数 记忆化时随便转移一下就行了 Code:

[AHOI2009]中国象棋

    题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个

[AHOI2009]中国象棋 BZOJ1801 dp

题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子。

洛谷P2023 [AHOI2009]维护序列

数据比线段树2要毒瘤,一直60分的原因是: 1.long long 没开 2.没有边做边%或者像我P3373一样写了个看着像的边做边%   上代码 1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<cstring> 5 #include<queue> 6 #define lson i*2,l,mid 7 #define rso