![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ccccccccc
cc
oliver-zzz
这个作者很懒,什么都没留下…
展开
-
7.20
7.20原创 2022-07-21 16:55:42 · 79 阅读 · 2 评论 -
c++读写文件
c+++++++++原创 2022-07-04 16:06:14 · 449 阅读 · 0 评论 -
判断子序列
给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。请你判断 a 序列是否为 b 序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。输入格式第一行包含两个整数 n,m。第二行包含 n 个整数,表示 a1,a2,…,an。第三行包含 m 个整数,表示 b1,b2,…,bm。输出格式如果 a 序列是 b 序列的子序列,输出一行 Y原创 2022-01-03 14:16:03 · 386 阅读 · 0 评论 -
最大异或对 模板题目,t树
相当于为每一个数 的每一位建立一个节点由于每个数最多32为所以M开这么大注意:异或的时候从高位选择才能选择出来最大的每一步首先看一下树中有没有与本位相反的位(这样的话异或值为1)有的话走过去否则只能走向相同节点#include<iostream>#include<cstring>using namespace std;const int N=1e5+10,M=N*32;int son[M][2],idx;void insert(int a){ i原创 2021-09-02 15:12:56 · 36 阅读 · 0 评论 -
最低通行费
/*那么必须在2*n-1的时间内出去也就意味着他只能赶路要么向下要么向右这无非就是上面摘花生的题目变成取最小值在这里试一下把使用s[len][j]不对啊,,,,,试了下发现画蛇添足注意:这上一道道题目不是不需要边界而是边界直接是0就行,0小于上一题所有的w所以在求最大值问题了已经足够了,当然也可以设为-INF而这道题目有必要先做一些边界不然的话,他是为了选择最小值所以我们要设置一下边界biru设置memset(f,1e9,sizeof f);这样他就不会从不该转移的地方转移过来了其实可能出错的原创 2021-08-03 09:24:20 · 209 阅读 · 0 评论 -
2021-08-03
/*只能向东走或者向南走多组数据我们可以定义 s[len][j],或者s[i][j]s[len][j]的话是我们当前走了len步 并且向东走了j步s[i][j]是我们走到i,j所有的走法我们发现这样表示集合的话我们是可以直接在集合的角度或者说层面上解决问题的这样显然时间复杂度会大大降低自己感悟:一开始先尝试比较大的集合划分,如果无法计算尝试变小hhh最差不过爆搜吗这里使用s[len][j]应该效率更高因为集合更大我们来试一下,不对好像一样啊,不试了*/#include<io原创 2021-08-03 09:13:14 · 37 阅读 · 0 评论 -
愤怒的小鸟
/*思路:首先这是一个重复覆盖问题我们把每一个点都看成一个二进制位这一类状态压缩重要的就是预处理本题的预处理:path数组:path[i][j]是表示那个过i,j小猪的抛物线,值是一个 state 表示这个抛物线可以打掉那些小猪这里涉及到抛物线,首先是解出来a,b在之后是依次判断哪个小猪可以被打掉,抛物线要满足开口向下,并且斜率不能是无穷再之后是常规又不一样的dps[state]是打掉这个状态的所有抛物线组合方式首先这里的f[state]是表示要打掉这个状态的这些小猪所需要的最小次数原创 2021-07-30 09:08:12 · 58 阅读 · 0 评论 -
皇后问题hhhh
/*第一种按照行进行枚举,那么我们不需要再枚举行只需要三个bool来记录这一列这一对角线还有副对角线有没有皇后即可一旦行数大于等于n则证明成功了一种方案将之push注意状态恢复*/#include<bits/stdc++.h>using namespace std;char c[15][15];bool yy[15],dg[19],udg[19];int n;void dfs(int x){ if(x>=n){ for(int i=0;i&原创 2021-07-24 20:46:49 · 120 阅读 · 0 评论 -
2021-07-23
/*dfs 从一开始int x为当前有多少个数字一个st记录那些被搞过了,注意状态恢复*/#include<bits/stdc++.h>using namespace std;int n;vector<int> temp;vector<vector<int>>res;bool st[9];void dfs(int x){ if(x>n){ res.push_back(temp); ret原创 2021-07-24 20:38:39 · 33 阅读 · 0 评论 -
整数划分啊
/*一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数 n 的一种划分。现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。输入格式共一行,包含一个整数 n。输出格式共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对 109+7 取模。数据范围1≤n≤1000分首先,对于0的划分方式是1种即所有的数都不选定义s[i,j] 为从前i个数种选择来划分j(包括i)f原创 2021-07-18 19:39:53 · 159 阅读 · 0 评论 -
石子合并啊
/*设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24;如果第二步是先原创 2021-07-18 19:27:26 · 61 阅读 · 0 评论 -
最长公共子序列
给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。输入格式第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串,表示字符串 A。第三行包含一个长度为 M 的字符串,表示字符串 B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N,M≤1000这道题S[i,j]含义是第一个字符串以i或者其前面的为尾巴,第二个以j或之前为尾巴时,最大的公共子序列集合f【i,j】是这个集合向外表现出的属原创 2021-07-18 11:52:09 · 73 阅读 · 0 评论 -
2021-07-18上升子序列
给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 N。第二行包含 N 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,−109≤数列中的数≤109#include<bits/stdc++.h>using namespace std;const int N=1005;int f[N],a[N];int main(){ int n; cin>>n; fo原创 2021-07-18 11:13:06 · 75 阅读 · 0 评论 -
数字三角形
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 88 1 02 7 4 44 5 2 6 5输入格式第一行包含整数 n,表示数字三角形的层数。接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数据范围1≤n≤500,−10000≤三角原创 2021-07-18 10:58:22 · 79 阅读 · 0 评论 -
2020.7.17
分组背包问题有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分原创 2021-07-17 12:13:27 · 79 阅读 · 2 评论 -
2021-07-17
多重背包问题有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤10000<V≤20000<vi,wi原创 2021-07-17 12:12:19 · 97 阅读 · 2 评论 -
完全背包问题
完全背包问题有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000有 N 种物品原创 2021-07-17 12:10:59 · 100 阅读 · 1 评论 -
2021-07-14
dp01背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值0<N,V≤10000<vi,wi≤1000输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。题解:1#incl原创 2021-07-14 21:35:10 · 42 阅读 · 0 评论