首页 > TAG信息列表 > 105

7. [2015年NOIP普及组] 扫雷游戏

题目链接     一个简单的模拟   1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<iomanip> 5 using namespace std; 6 int n,m; 7 char s[105][105]; 8 int map[105][105]; 9 int dx[10]={0,0,0,1,-1,1,1,-1,-1}; 10 int

「AGC012F」Prefix Median 题解 (DP)

题目简介 给定一个长度为 \(2n-1\) 的序列 \(a\),你可以随意排列 \(a\) 中的元素,请求出有多少种不同的序列 \(b\),满足 \(b\) 的长度为 \(n\)。 \(b_i=\{a_1\ldots a_{2i-1}\}\) 的中位数。 \(n\leq 50\)。 答案对 \(10^9+7\) 取模。 分析 考虑当前已有的序列 \(a\) ,每次加入

字典

##字典 x={"吕布","关羽"}type(x)<class 'set'>y={"吕布","扣扣不","关羽","关嘻嘻"}type(y)<class 'set'>a={"吕布":"口口布","关羽":"关嘻嘻","刘备":

编辑距离

编辑距离 题目简述:   题目让我们把字符串B通过插入,删除,修改一个字符三种方式变化为字符A,求最少操作次数。此处求的是最值,考虑用动态规划 定义状态:   dp [ i ] [ j ] 表示使B [ 1 ~ j ] 与 A [ 1 ~ i ]变相等要花的值,最后的答案即为dp [ lenb ] [ lena ] 状态转移: 所有的动

释放囚犯

释放囚犯   区间dp的套路:设f[i][j]为区间释放i~j号囚犯所需最少的肉(注意,i,j不是牢房编号,是释放的囚犯编号,也就是下面的a[i]数组)   枚举区间的分界点k,转移方程为:   f[i][j]=min{f[i][j],f[i][k-1]+f[k+1][j]+a[j+1]-a[i-1]-1-1}   把后面这一坨拿出来拆开看看,   f[i][k-1

Cow Travelling S

P1535 [USACO08MAR]Cow Travelling S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 直接bfs会超时 用cnt记录某时刻到达某点的个数,如果不为0就直接动态规划的思想加上来源的方案数cnt[nx][ny][nt]+=cnt[x][y][t],可大量减少入队的次数 // https://www.luogu.com.cn/problem/P15

最大正方形

#include <cstdio> #include <algorithm> using namespace std; int n, m, ans; int a[105][105], sum[105][105]; int main() { int size; scanf("%d%d", &n, &m); size = min(n, m); for (int i = 1; i <= n; i++)

Math

    线性筛法   线性筛法通过“从大到小累积质因子”的方式标记每个合数,即让12只有 3*2*2 一种产生方式。设数组V记录每个数的最小质因子,我们按照以下步骤维护V   1.依次考虑 2--N 之间的每个数 i   2.若v[i]=i,   Code  #include<bits/stdc++.h> using namespace std;

DP の 百题大过关

NO.1 调度问题 dp[i][j]表示处理第i个作业且A的总工作时间为j时B的总工作时间 则对于每一个i,如果j<a[i](A的总时间还不能处理i),因为不得不处理,因此只能由B处理 dp[i][j]=dp[i-1][j]+b[i] 否则A,B都可以处理 dp[i][j]=min(dp[i-1][j]+b[i],dp[i-1][j-a[i]]) dp[i-1][j]+b[i]:如果第i个

暑假集训Day3 J(lcm系列问题)

        本质上还是lcm问题,我们设f[i][j]为到s串的第i位(第i位必选),t串的第j位,符合条件的个数, ***注意这里第i位是必选的***, 这样状态统计的时候就不会混,最后ans就f[i][m]求个和就行,注意到由于t串是多个字符的,所以在求f[i][1]和f[i][j]的时候还是有点差别的。 1 #include "bi

P2693 [USACO1.3]号码锁 Combination Lock[普及-]

https://www.luogu.com.cn/problem/P2693涉及知识点:模拟,枚举,暴力橙色题 思路: 一:枚举所有可能的锁,再定义一个bool数组判断该锁的密码是否被枚举过,如果没有就ans++,再标记改密码为true #include <bits/stdc++.h> using namespace std; int n, a, b, c, d, e, f, ans; bool

AcWing 105 七夕祭

题目传送门 一、核心问题分析 我的解法涉及一个贪心模板 ,请先看透这个题 :糖果传递 首先提醒一下,在一行中,各列摊位之间交换位置,是不改变行的摊位数量的。列同理。 我们模拟一下交换的过程: 假设七夕祭有\(12\)个摊位,图中有红圈的是题目主角喜欢的摊位。 ​ 经过两轮交换后各列的摊

AcWing 105. 七夕祭

分治 + 推式子(构造绝对值不等式) 交换行的元素时每列的元素个数不变,交换列时同理,所以可以分别考虑行和列 对于行(列),可以看成均分纸牌的模型,唯一的不同点是从链变成了环(首尾可交换) 然后就可以推式子了 推式子具体过程 #include<bits/stdc++.h> using namespace std; #define fr

AcWing 1855. 愤怒的奶牛

题目 思考 我就挺懵逼,为什么很多人都是BFS+二分,直接暴枚它不香吗?(虽然可能挺长,但挺容易懂) 反正n才100,不怕TLE,三重循环,干他!sort都不用! 时间复杂度嘛……也就\(O(n^3)\)嘛! 不过做\(100^3\)次而已,根本超不了时. 代码(C++) #include<bits/stdc++.h> //#deifne int long long using na

T244725 道路重建

题目描述 从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连。在经过一次严重的战争之后,有d条道路被破坏了。国王想要修复国家的道路系统,现在有两个重要城市A和B之间的交通中断,国王希望尽快的恢复两个城市之间的连接。你的任务就是修复一些道

w16 P3905 道路重建

题目描述 从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连。在经过一次严重的战争之后,有d条道路被破坏了。国王想要修复国家的道路系统,现在有两个重要城市A和B之间的交通中断,国王希望尽快的恢复两个城市之间的连接。你的任务就是修复一些道

C++黑马程序员——P99-105. 类和对象-封装

P99. 类和对象——封装——属性和行为作为整体 P101. 类和对象——封装——访问权限 P102. ...——...——C++中 class 和 struct 的区别 P103. ...——...——成员属性私有化 (P99)   C++面向对象的三大特性为:封装、继承、多态   C++认为万事万物都皆为对象,对象有其属性和行

POJ1651 Multiplication Puzzle (区间DP)

这道题的妙处在于把原问题看成矩阵连乘问题,求这些矩阵相乘的最小乘法次数,比如一个i*k矩阵乘一个k*j的矩阵,他们的乘法次数就是i*k*j (联想矩阵乘法的三层循环),题目说的取走一张牌,类似于矩阵相乘除去k,所以根据这个条件分析可以联想到矩阵。 题目要求首尾两端不可取,也就是求到最后只剩

POJ2955 Brackets (区间DP)

很好的区间DP题。 需要注意第一种情况不管是否匹配,都要枚举k来更新答案,比如: “()()()”:dp[0][5]=dp[1][4]+2=4,枚举k,k=1时,dp[0][1]+dp[2][5]=6,最后取最大值6. 第一层d相当于“长度”的含义,第二层枚举i,j就可以用i+d表示,通过这种方式枚举区间左右端点。 1 #include<cstdio> 2 #include<c

中国剩余定理

《孙子算经》有这么一道题:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何。 就是说:一些东西,不知道有多少个,三个三个数剩两个,五个五个数剩三个,七个七个数剩两个,问这些东西最少有多少个。 《孙子歌诀》中给出了解法:三人同行七十稀,五树梅花廿一支,七子团圆正半月,除百零

CF EDU 105 C - 1D Sokoban

C - 1D Sokoban 二分 + 找性质 可分正负的箱子分别讨论 本题的关键是发现一个重要的性质:因为推箱子这个过程会让被推到的箱子成为连续的一段,若想让在特殊位置的箱子最多,则这一段的终点一定要在特殊位置上(起点也可以, 这里的一定不是说不在特殊位置就取不到最优,而是在特殊位置上的

倍增总结

日期:2022年5月20日 注:本博客仅供参考   概念 倍增,顾名思义,每次增加一倍。展开来说,就是每次根据已经得到的信息,将考虑的范围增加一倍, 从而加速操作。 应用 倍增的应用主要是三个方面:快速幂、线性(RMQ问题)、树(LCA问题)。 代码实现 快速幂及其应用 【模板】快速幂(P1226) 1 #include<

常用RGB颜色表

    常用RGB颜色表 (bokee.com)   R G B 值   R G B 值   R G B 值 黑色 0 0 0 #000000 黄色 255 255 0 #FFFF00 浅灰蓝色 176 224 230 #B0E0E6 象牙黑 41 36 33 #292421 香蕉色 227 207 87

105. 从前序与中序遍历序列构造二叉树

package leetcode; import java.util.HashMap; public class demo_105 { public TreeNode buildTree(int[] preorder, int[] inorder) { HashMap<Integer, Integer> map=new HashMap<Integer, Integer>(); //保留节点在中序遍历中的位置 for (in

2021台北ICPC Seesaw (背包)

问题转化为从A,B两组中分别取相同个数的东西的某一权值总和的最取次数 fa/b[i][j][v] 表示前i个数,取j个,能否凑成体积v,f值就是0/1 注意控制合法状态,最后的枚举不要超过A,B的值域 #include<bits/stdc++.h> //#include <bits/extc++.h> using namespace std; // using namespace __