#include<iostream> using namespace std; int n; int maxx[21][21]; int lie[21]; int aa[21]; int ans; void dfs(int x,int sum) { if(x>n) { ans=max(ans,sum); return; } int vv=0; for(int p=x;p<=n;p++) { vv+=aa[p]; } if(sum+vv<ans) r
题:https://codeforces.com/contest/1288/problem/D题意:给定n个序列,每个序列m个数,求第i个和第j个序列组成b序列,b序列=max(a[i][k],a[j][k]),使得b序列最小值最大化,求达成条件的 i 和 j (i可等于j) 分析:因为m<=8,所以我们考虑对每个序列的m个数进行状压。 这题的状压是,“1”状态,表
\(Description\) 因为是\(OJ\)上的题,就简单点好了。给出一个长度为\(n\)的序列,给出\(M\)个询问:在\([l,r]\)之间找到一个在这个区间里只出现过一次的数,并且要求找的这个数尽可能大。如果找不到这样的数,则直接输出\(0\)。我会采取一些措施强制在线。 \(Input\) 第一行为两个整数\(N
前几天刚学习了分块,感觉这道题用分块求解的方式挺巧妙的 既然用的是分块,那么肯定是两端暴力求解,中间要快速地处理每个块 首先我们要得到一个结论,最后求出的这一个众数必定为中间块的众数或者是两端的任意一个数,那么我们用\(nu[i][j]\)来表示第\(i\)个块到第\(j\)个块的众数,我们可
题目描述 有N个村庄,编号从1到N,你应该建造一些道路,使每个村庄都可以相互连接。 两个村A和B是相连的,当且仅当A和B之间有一条道路,或者存在一个村C使得在A和C之间有一条道路,并且C和B相连。 现在一些村庄之间已经有一些道路,你的任务就是修建一些道路,使所有村庄都连通起来,并且所有道路
每个房子可以住人,输入n个人,每个人可以向左或者向右移动一个位置,求最少占房子的数量和最大占房子的数量。 最小:从有人的开始数三个可以到中间的房子里 最大:从左往右扫,大于一的往右一挪,再从右往左扫,大于一的往左诺,因为是大于一,所以不会有人移动两次 int maxx[MAXN],minn[MAXN]; int
读错题了,然后写了一个树上 LIS,应该是对的吧...... code: #include <bits/stdc++.h> #define N 200005 #define LL long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; struct seg { #define lson t[x].ls #de
CF600D 题解 题目的字面意思 给出一个无向图,要求这个图是和谐的,和谐的定义是,如果A 到 C(A < B < C)有一条路, 那么 B 到C也有一条路。数据范围给的是2e5 然后我们可以意识到,如果一个子集中的所有元素都是连续的,那么这个子集,就是和谐的,因为联通图,任意两点都可以到
题目地址 注意点: if(canGet[x][y-1])l[x][y]=max(l[x][y],l[x][y-1]); if(canGet[x][y-1])r[x][y]=min(r[x][y],r[x][y-1]); #include<cstdio>#include<iostream>using namespace std;const int MAXN=2e3,INF=2e9;bool canGet[MAXN][MAXN];//可获取int l[MAXN][MAXN],
期望得分:100+40+0 实际得分:0+40+0 awa(我讨厌大模拟!!! T1:沙雕大模拟!!!ccc 题面如下: 思路:直接模拟着做呗,注意一定要细心!耐心!认真!!!!! 我的零蛋代码:(零蛋还好意思贴出来?!) #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int inf=
链接 题意: 在树上选一条点个数小于等于k的简单路径,使路径外的点到路径的距离的最大值最小。 求出最小的最大值 题解: 可以反证得出 这条简单路径一定在树的直径上 树的直径的两个端点可以很简单的用两边dfs求出 那要如何求出这条链的信息呢 ? 可以在一个端点设置标记 如何利用
筛法: NOIP2018货币系统 首先证明答案就是这组数中不能被其他数凑出来的数的个数。这个我不会证,证明我也看不懂。但是可以意会 然后就是如何去掉能被其他数凑出来的数。题解里的dp我没看懂,但我觉得这个筛法挺好用的。。。 大体思想就是先把数组排一下序,然后对于每一个\(a_i\),如果
题目地址 易错点: 应确认好元素乘法顺序. 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 const int MAXX=2e2,MAXY=2e2; 5 struct Mat{ 6 int x,y; 7 int a[MAXX][MAXY]; 8 }; 9 Mat mull(Mat a,Mat b){10 Mat c;11 c.x=b.x,c.y=a.
题目链接:https://vjudge.net/problem/POJ-1819 题意:给你一些圆,问你水平排序后可以删除哪些圆不影响。 我们可以这样,从左往右枚举 c[i] 圆,然后从小于 i 的 园中找与其相切的相对应横坐标x,取个max,然后就得到坐标,两坐标间的圆可删去。注意特判最左和最右。 代码: 1 #include<iostre
订正了三天的题目 自闭.... T1 幸福T2 树链剖分 考虑到 对于一个 树 确定覆盖哪几条边 不会随着 树的根节点的改变而改变 而且 这种对于一个无根树的路径进行覆盖 我们显然可以想到 树上差分 对于边的差分 对于一条路径从s到t 我们类比序列上的差分 即 $sum[s]--,sum[t]--,s
说实话只要明白了题意这个题还是比较水的。。。(样例我差点蒙了。。 具体就是先把每个点的点权都平方计入答案(因为每个点也算一条路径。。) 再按题意模拟就行了。 我的 \(dfs\) 是对每个点进行的,因此一条两点之间的路径被计算了两次。所以要除以 \(2\)。 nmd这取模是真的烦,不过还是
思路十分简单,答案只有 3 种可能,但是有一些细节需要额外注意一下. code: #include <bits/stdc++.h>#define N 300002 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int val[N],hd[N],to[N<<1],nex[N<<1],d1[N],d2[N],n,edges,maxx,mx,m
这个题其实也是很简单的莫队,题目要求是给一个序列,询问l-r区间内部,找到有多少对答案满足 i < j 并且 | a[ i ] -a[ j ] | <=k 也就是有多少对,满足差值小于k的个数。 把这个式子展开,其实就是-k<= a[ i ] -a [ j ] <= k 也就是 a[ j ] -k <= a[ i ] <= a[ j ] + k,也就是说,对于某
因为到为0的点,充钱的范围都是不确定的,我们维护一个满足条件的最小值以及满足条件的最大值。 当min>d时,代表已经满足条件限制了 当a[ i ] = 0 并且 max<0,代表需要充钱,充钱能够保证当前 minn=0 maxx = d 其他情况则对minn, maxx相应的增加和减少进行操作就可以了 #include<bits/st
Problem Description JOJO 的奇幻冒险是一部非常火的漫画。漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」。 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 \(x\) 欧拉或者 \(x\) 木大表示有 \(x\) 个欧拉或者木大。 为了简化内容我们现在用字母表示喊出的话。 我
彭汉川版mRMR特征选择算法网址:https://www.mathworks.com/matlabcentral/fileexchange/14608-mrmr-feature-selection-using-mutual-information-computation estpa函数是为了计算单个向量a的概率分布,其大概思想是: 当a=[1 2 1 2 1]时,其概率分布为 p(x=1)=3/5=0.6, p(x=2)=2/5=
Boring counting 题目传送门 解题思路 后缀数组。枚举每种长度,对于每个字符串,记录其最大起始位置和最小起始位置,比较是否重合。 代码如下 #include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; typedef long long ll; const int N = 1005; char s[N]; int sa[
边权转点权,每次遍历到下一个点,把走个这条边的权值加入主席树中即可。 #include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>using namespace std;const int maxx = 2e5+10;struct node{ int l,r,cnt;}tree[maxx*40];int head[maxx],rk[maxx],siz
Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to distribute rewards to his workers. Now he has a trouble about how to distribute the rewards. The workers will compare their rewards ,and some one may have deman
//判断点是否在闭合区域内 bool IsPointInPolygon(Point p, vector<Point> points) { //vector<Point> points:表示闭合区域由这些点围成 double minX = points[ 0 ].x; double maxX = points[ 0 ].x; double minY = points[ 0 ].y; double maxY = points[ 0 ].y; for (