首页 > TAG信息列表 > SCOI2009
[SCOI2009]粉刷匠
首先,这题明显是有无后效性的,所以我们并不需要对顺序进行过多的考虑 感觉有一点像完全背包 所以我们考虑f[i][j]表示考虑刷到i,刷了j次最多可以正确粉刷多少个 然后我们再考虑g[i][j][k]为第i块板刷了j次,而且刷的是前k个 当我们考虑第i个刷了k次时 f[i][j]=max(f[i][j],f[i-1][j-k]+1026 [SCOI2009]生日快乐 dfs
链接:https://ac.nowcoder.com/acm/contest/23156/1026来源:牛客网 题目描述 windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕。现在包括windy ,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋糕。 wind【做题记录】[SCOI2009]围豆豆
[SCOI2009]围豆豆 \(n\times m(n,m\le 10)\) 的网格中有 \(d\) 个球 \((d\le 9)\),要求在网格中选定一个起点开始做一个欧拉回路,路径的价值为路径完全包住的球的价值之和减去路径长度,求所有路径中的价值最大值。 有价值与步数的两个限制,首先想着把其中一个作为状态控制变量。 由于2021.10.08pm
10.08PM 预期 实际 A 100 100 B 100 100 C 100 100 S 300 300 当我AK了,不能说明我强,只能说题出的菜 A[SCOI2009] 生日快乐 \(\blacktriangle\) 一个非常悲伤的故事:搜索比记忆化搜索快。所以,摆烂了。 B[SCOI2009] 最长距离 \(\blacktriangle\) 今天的题属于全BZOJ1026: [SCOI2009]windy数(数位dp)
题意 题目链接 Sol 很zz的数位dp $f[i][j]$表示第$i$位,前一位是$j$的方案数 转移的时候枚举一下是否相同即可 注意当lim达到上界的时候是不能记忆化的! /* */ #include<cstdio> #include<map> #include<cmath> #include<algorithm> #define int long long using namespace s[SCOI2009]迷路
嘟嘟嘟 预备知识:对于不带权的图的邻接矩阵\(G\),\(G ^ T\)表示两点间长度为\(T\)的路径的方案数。 这个其实挺好理解的,想一下开始的邻接矩阵,\(G[i][j]\)就表示的是\(i\)走1步到\(j\)的方案数。然后自己模拟一下两个矩阵相乘,\(G[i][j]\)就表示走两步的方案数。以此类推。 但是这道[SCOI2009]生日快乐
嘟嘟嘟 这道题最多只切9刀,然后爆搜就过了(这只是感性理解吧,复杂度我不太会算)。 怎么爆搜呢,首先,如果一个长为x,宽为y的蛋糕被分成k份,那么每一份长最小为x / k,宽最小为y / k,而且每一块蛋糕的长和宽都是这个数的整数倍,这个不难理解。 然后就可以爆搜了:对于每一个状态(x, y, k)枚[BZOJ]1026[SCOI2009]windy数
题目链接:[SCOI2009]windy数 题意: 求[l,r]之间的有多少个数满足:不包含前导0,且相邻两位数字差大于等于2。 题解: 第一次不看题解一遍通过数位dp祭(虽然以前做过这道题,但是已经忘了)。 数位dp一直是恶心我的难点,这道题刚好是一道很简单的的数位dp,于是想尝试一下。 数位dp肯定要P2564 [SCOI2009]生日礼物
P2564 [SCOI2009]生日礼物 题意: n个彩珠,k个种类,分布在一个彩带上,现在要选取彩带的一部分,要求该部分包含所有种类的彩珠,且长度尽可能短,你能计算这个最短的长度吗? 1≤N≤1000000,1≤K≤60,0≤珠子位置<2{31} 题解: 比赛时第一反应是尺取,但是一看这个距离放弃了,后来想可以先离散?或[SCOI2009]粉刷匠(读错题版)
昨天这道题想了一下午还是不会,晚上弃疗决定抄题解,总觉得题解做法哪里不太对劲,后来发现是我自己读错题了。。。先简述一下读错后的题面吧:其实和原题是差不多的,唯一的改动就是——原题中每个格子只能涂一次,而读错的版本中每个块可以涂若干次,以最后一次为准(就是颜色可以覆盖)晚上就这P4158 [SCOI2009]粉刷匠
题目链接 我们不妨先考虑只有一行的情形。 我们做两个前缀和\(red_i,bule_i\)分别表示前\(i\)个里有多少个红色块和蓝色块。 设\(f[i][k]\)为做到第\(i\)块,此时用了\(k\)次涂刷的最大收益。 我们思考如下问题:既然重复涂色没有收益,那么我们强制让我们的涂色方案没有重叠的情况,即让BZOJ-1297 [SCOI2009]迷路(邻接矩阵的幂)
题目描述 有向图有 \(n(2\leq n\leq 10)\) 个节点,从节点 \(0\) 出发,必须恰好在 \(t(1\leq t\leq 10^9)\) 时刻到达节点 \(n-1\)。 现在给出该有向图(边权 \(1\) ~ \(9\)),求总共有多少种不同的路径。 分析 首先有一个离散数学中的结论:用邻接矩阵 \(A\) 存无向图顶点间的关系,[SCOI2009] windy 数 (数位dp)
题目 算法 应该是一道很经典的数位dp题 我们设dp[i][j]是填到第i位此时第i位的数是j的方案数 然后进行转移(代码注释) 代码 #include<iostream> #include<cstdio> #include<cmath> #define ll long long using namespace std; ll p,q,dp[15][15]; ll init(){//进行初始化 for(lLuogu P4161 [SCOI2009]游戏
题意 定义一个长度为 \(n\) 的置换的步数为将 \(P=(1,2,\cdots,n)\) 在该置换操作下变回原样的最小次数。 求有多少个 \(K\) 使得存在一个长度为 \(n\) 置换使得其步数为 \(K\)。 \(\texttt{Data Range:}1\leq n\leq 10^3\) 题解 类比一下这题我们可以得到如下转移方程: \[f_{i,j}=P4159 [SCOI2009] 迷路
P4159 [SCOI2009] 迷路 先考虑当路径长度都是1的情况,那么题目要求的其实就是走了\(t\)步到达\(n\)点的方案数 设\(f[i][j][t]\)表示从\(i\)到\(j\)恰好走了\(t\)步的方案数,则 \(f[i][j][t] = \sum\limits_{k=1}^nf[i][k][t-1]*f[k][j][1]\) 而\(f[k][j][1]\)其实就是\(g[i][j]\)即luoguP2657 [SCOI2009] windy 数 数位dp
基本上把数位dp那一套给忘了,今天重学一遍. 感觉采用递推的方式还是蛮方便的,然后要注意几个细节: 1. 通常算 f(x+1)=calc(1,x),这样更方便算一些. 2. 每种小于最大长度的所有结果都要累加. 3. 很多时候不要忘记 0 的贡献. 4. 要特判前缀合不合法. code: #include <[SCOI2009]粉刷匠
题目 点这里看题目。 分析 首先可以考虑一个比较粗糙的大 DP : \(f(i,j)\):前\(i\)行,刷\(j\)次,最多能刷的正确格子数。 转移是一个背包: \[f(i,j)=\max_{1\le k\le m}\{f(i-1,j-k)+con(i,k)\} \] 其中\(con(i,k)\)表示第\(i\)行刷\(k\)次最多能刷的正确格子数。BZOJ 1025. [SCOI2009]游戏
根据题意,一种置换的排数就是循环节长度的 $\text{lcm} + 1$。 就变成把 $n$ 个数分成任意多个数,能组成的 $\text{lcm}$ 有多少种。 考虑一个数 $n = p_1 ^ {k_1} p_2 ^ {k_2} \cdots p_m ^{k_m}$ 是否能某些数的 $\text{lcm}$,且这些数的和为 $n$。 当每个数为 $p_1 ^ {k_1}, pP2657 [SCOI2009]windy数
思路清看代码 #include <bits/stdc++.h> #define int long long #define rep(x,y,z) for(int x = y ; x <= z ; x ++) using namespace std ; int f[20][20] , a[20] ; int calc(int x) { int len = 0 ; while(x>0) {//江数位拆开以便于处理 a[++len] = x % 10P4162 [SCOI2009]最长距离
题目链接 这道题数据范围比较小,所以方法还是比较暴力的。 思路: 先按每个格子的状态,让所有格子与他周围的格子连一条权值为它连向那个格子的值(0或1)。然后我们n方枚举所有格子跑最短路,最短路即为从起点到终点的最小障碍数。然后我们枚举所有最短路,先看他移除障碍后是否只用了小于等bzoj1297 [SCOI2009]迷路 矩阵快速幂
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1297 题解 如果每一条边没有边权,那么就是一般的矩阵快速幂。 因为边权 \(\in [1, 9]\),所以我们可以把每一个点拆成 \(9\) 个点,对于一条边权为 \(w\) 的边 \(x \to y\),可以建立一条边 \(x_{w-1}\to y_0\)。 然后 \(x_i\to$SCOI2009\ $windy数 数位$dp$
\(Sol\) 数位\(dp\)常规套路题. \(dp[i][j]\)表示从低位到高位填到第\(i\)位且第\(i\)位的数字为\(j\)的方案数.答案就是\(sol(r)-sol(l+1).\)这里\(dp\)的过程十分简单,一般出错的也就是计算小于等于\(x\)的\(windy\)数,所以这里简述一下这个流程: 首先是预处理出\(x\)的位数\(ct题解 P4161 【[SCOI2009]游戏】
先无良宣传一下博客 \(wwwwww\) 文章列表 - 地灵殿 - 洛谷博客 知识点: 问题转化 , 背包DP 原题面: P4161 [SCOI2009]游戏 对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。 最开始 把数字按顺序1,2,3,……,N写一排在纸上。 然后再在这一排下面写上它们对应的数字。题解 [BZOJ1295][SCOI2009] 最长距离
题面 解析 \(n\)只有\(30\)可以直接枚举每个矩形, 判断他们的左上角到右下角或右上角到左上角的最短路是否小于\(T\). 最短路可以用\(dijkstra\). 一开始想用\(DP\)写最短路后来才知道思路有问题(因为最短路的方案可能不在矩形中). code: #include <iostream> #include <cstdio> #P4161 [SCOI2009]游戏 素数筛 + 背包DP
题目描述 windy学会了一种游戏。 对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。 最开始windy把数字按顺序 1,2,3,…… ,N写一排在纸上。 然后再在这一排下面写上它们对应的数字。 然后又在新的一排下面写上它们对应的数字。 如此反复,直到序列再次变为 \(1,2,3,……,N\) 。 如: