首页 > TAG信息列表 > ZJOI2007

NC20471 [ZJOI2007]棋盘制作

题目链接 题目 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。 据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。 而我们的主人公小Q,正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不

P1110 [ZJOI2007] 报表统计

[ZJOI2007] 报表统计 题目描述 小 Q 的妈妈是一个出纳,经常需要做一些统计报表的工作。今天是妈妈的生日,小 Q 希望可以帮妈妈分担一些工作,作为她的生日礼物之一。 经过仔细观察,小 Q 发现统计一张报表实际上是维护一个非负整数数列,并且进行一些查询操作。 在最开始的时候,有一个长

luogu [ZJOI2007] 矩阵游戏

[ZJOI2007] 矩阵游戏 题目描述 小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个 \(n \times n\) 黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作: 行交换操作:选择矩阵的任意两行,交换这两行(即交换

1043 [ZJOI2007]棋盘制作 悬线法 线性DP

链接:https://ac.nowcoder.com/acm/problem/20471来源:牛客网 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。 据说国际象棋起源 于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦

P1129 [ZJOI2007] 矩阵游戏(二分图匹配)

题目链接:点击这里 题目大意: 给定一个 n × n n\times n n×n 的矩阵,每个元素有 0

洛谷 P2120 [ZJOI2007] 仓库建设

链接: P2120 题意: 有 \(n\) 个点依次编号为 \(1\sim n\)。给出这 \(n\) 个点的信息,包括位置 \(x_i\),所拥有的的物品数量 \(p_i\),在此建设一个仓库的费用 \(c_i\)。 每个物品可以向编号更大的点移动,一个物品移动一个单位距离的费用为1。 求将所有物品都放进仓库所需的最小费用。

【题解】[ZJOI2007]最大半连通子图

[ZJOI2007]最大半连通子图 \(\text{Solution:}\) 首先考虑何时满足题目中所说的最大半连通子图。 先把强连通分量缩起来应该是毋庸置疑的一步了。考虑如何从一个强连通分量来拓展到半连通分量。 推论1:如果一张缩完点的图是半连通图,那么它的拓扑序一定唯一。 \(Proof:\) 假定拓扑

[ZJOI2007] 矩阵游戏

注意寻找题面隐藏关系   #include<bits/stdc++.h> using namespace std; const int N=1e5+7; int n,cnt,x,tot,t; int head[N],nxt[N<<1],to[N<<1]; int match[N],flag[N]; int _; void add(int x,int y) { _++; to[_]=y; nxt[_]=head[x]; head[x

P1129 [ZJOI2007] 矩阵游戏

[ZJOI2007] 矩阵游戏 题目描述 小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个 $n \times n$ 黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作: - 行交换操作:选择矩阵的任意两行,交换这两行(即交换对

[ZJOI2007] 时态同步(树形dp)

传送门 很好的一道树形dp的题目 根据所给题意可以总结为:从激励点出发求到所有叶子节点时间相同的最小次数 由于要找最小次数,考虑贪心的方法,要使次数尽量小,也就是要使子节点的公共边尽可能的大。 有一点可以肯定的是一定要知道时间最长是多少,然后其他树枝才能根据这个时间求

[ZJOI2007]矩阵游戏

嘟嘟嘟   这道题如果不看题解,我是绝对想不到二分图匹配的。 咱们先不想二分图匹配的事,先想想什么状态是有解的:只要每一行都有一个黑块,且每一个黑块都在不同的一列,那么一定有解。因为即使这些黑块不在主对角线上,我们也可以通过交换行(列)来达到这个最终状态,这就像不断交换两个数来给

P2056 [ZJOI2007]捉迷藏

【题意】 给一个树,初始点权全部为0,要求你支持如下操作 1.把一个点的点权异或上1   2.查询树上点权为0的两点之间距离最大的距离 【分析】 仍然考虑先建立点分树,然后对于每个点记录如下信息,开两个可删除的优先级队列记录子树内对自己的贡献,和子树内对fa的贡献 动态维护这些信息,查

【斜率优化DP】luogu_P2120 [ZJOI2007]仓库建设

题意 已知N个厂之间的距离,每个厂有p个产品,在这个厂建仓库需要c费用。 如果这个厂不建仓库,那么产品要往后面最近的仓库移,费用是商品个数*到后面那个仓库的路程。 求最小的总费用。 思路 设f[i]为在第i个厂建仓库的最小费用。 f[i]=min{f[j]+val(j,i)+c[i]} val用前缀和优化,这样子是

[ZJOI2007]棋盘制作

国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。 据说国际象棋起源 于易经的思想,棋盘是一个88大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。 而我们的主人公小Q, 正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不满足于普通的棋盘

[题解] P2120 [ZJOI2007]仓库建设

[题解] P2120 [ZJOI2007]仓库建设 洛谷题目链接 首先考虑用动态规划 f_ifi​ 表示从第 11 个到第 ii 个位置 (第 ii 个位置修建仓库) 的代价 sum_isumi​ 表示从第 11 个到第 ii 个位置的成品总和 dis_idisi​ 表示到第 ii 个位置到到第 nn 个位置的距离 s_isi

P2120 [ZJOI2007]仓库建设

令 \(f_i\) 表示在 \(i\) 工厂建立仓库,\(i+1\sim n-1\) 工厂不建立仓库的最小总费用。对 \(p\) 做一遍前缀和。 转移直接枚举上一个建立的工厂在哪儿: \[f_i=f_j-(p_i-p_j)\times(x_n-x_i)(j<i)+c_i \]考虑两个决策 \(j,k(j<k)\),若 \(j\) 比 \(k\) 优: \[f_j-(p_i-p_j)\times(x_n-x_

[ZJOI2007] 棋盘制作

悬线法 即计算出一个图形中最大矩形面积的DP方法 代码如下,很好懂 #include<bits/stdc++.h> using namespace std; int n,m,h[2001][2001],l[2001][2001],r[2001][2001],p[2001][2001],ans1=1,ans2=1; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){

[ZJOI2007]报表统计

Link 题目描述 在原数列第 \(i\) 个后面添加一个新元素 \(k\);如果原数列的第 \(i\) 个元素已经添加了若干元素,则添加在这些元素的最后。 查询相邻两个元素的差值的绝对值的最小值。 查询所有元素中一堆元素的差值的绝对值的最小值。 解法 第一个操作很好维护,若要在第 \(i\) 个元

《洛谷P2056 [ZJOI2007]捉迷藏》

这题有很多的做法。 首先最远的两个点很显然是直径。 然后和之前做的一道直径合并很像。 我们知道这里是一个单点修改,修改了之后会影响它的父节点以上的情况。 那么,我们又知道dfs序满足子节点的dfs序在父节点的dfs序内部。 那么我们可以用线段树去维护dfs的区间直径。 然后显然这

洛谷 P1129 [ZJOI2007]矩阵游戏

题目传送门 解题思路: 将1所在的位置的行编号和列编号连边,跑二分图,如果最后能跑出二分图,说明有方案可以一行对应一列,一定可以通过一定变换找到目标状态。 AC代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 5 using namespace std; 6 7 int t,n,hea

P1129 [ZJOI2007]矩阵游戏 【最大流】

           思路   因为不需要保证只有主对角线上有黑块   所以这是道蓝题   那么只要由让 S -> Line[i],Row[j] ->T   在i == j 时给行列上连边即可   注意下因为不用保证只有主对角线上才有黑块   所以这样跑出来的Maxflow是有可能大于n的   注意一下输出条

洛谷 P1110 [ZJOI2007]报表统计

刷 Splay 时碰见了这题。发现根本不用写 Splay,直接链表 + std::multiset 乱搞就好了。 由于我自带大常数,吸氧才过掉。。。 #include <cstdio> #include <set> inline int read(void){ int res = 0; char ch = getchar(); while(ch < '0' || ch > '9') ch = ge

luoguP1169 [ZJOI2007]棋盘制作

悬线法dp秒杀。。。 #include<bits/stdc++.h> #define MAXN 2000 using namespace std; int n,m,ans1,ans2; int num[MAXN+5][MAXN+5],l[MAXN+5][MAXN+5],r[MAXN+5][MAXN+5],up[MAXN+5][MAXN+5]; void init(){ cin>>n>>m; for(int i = 1 ; i <= n ; i++){

洛谷 P2120 [ZJOI2007]仓库建设

题目链接 Step1 朴素DP for(int i=1;i<=n;i++){ for(int j=0;j<i;j++){ long long x=0; for(int k=j+1;k<=i;k++) x+=p[k]*(a[i]-a[k]); dp[i]=min(dp[i],dp[j]+x+c[i]); } } Step 2 前缀和优化 for(int i=1;i<=n;i

BZOJ 1093. [ZJOI2007]最大半连通子图

  如果这张图是个DAG,那么最长链就是第一个答案,所以就先tarjan缩点。 第二部分拓扑排序解决,注意重边会影响答案,所以不要重复转移。 #include <bits/stdc++.h> namespace IO { char buf[1 << 21], *p1 = buf, *p2 = buf; int p, p3 = -1; void read() {} inline