例题:题解:该题很数据量很大用传统的动态规划算法写,会TLE,所以需要用二分优化算法,我们可以定义一个栈Stack[],可以说是单调栈,利用二分查找,保持栈的单调行,从一层for循环里找到每一个ans所在的位置以样例1为例:1 9 10 5 11 2 13Stack[1]=a[0]先把第一个值入栈1234519101113这是最大的递增子序列,...
简单dp入门:题目链接思路比较简单想,暴
题意:给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除答案对1e9+7取模输入:输入一个字符串,由数字构成,长度小于等于50输出:一个整数题解:这题挺难的,思路不好开,但是还是可以做,由于字符串最长为50,所以字符串所有加起来的和最大和不超过450,我们可以用01背包思想做。定义dp[i][j],i代表字串长度,j代表和,dp[i][j]代表长度为i...
题目链接题解: 一道简
题意:在1--1e9中,求出所有位数相加为s的个数s是自己给出的 s的范围[1,81]ac代码:#include<bits/stdc++.h>using namespace std;//#define maxn 1005int dp[10][82];void slove_dp(){ for(int i=1; i<10; i++) { ...
252-01串题目描述:ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。注:01串的长度为2时,有3种:00,01,0。输入描述:第一行有一个整数n(0<n<=100),表示有n组测试数据;随后有n行,每行有一个整数m(2<=m&l...
题解:一道DP,不算简单也不算难,做过类似的话会有一些想法i/jAb3bdd00001b01111301222b01233A11233画一下图研究一下结果:找出动态转移方程 if s[i]==str[j]说明有一个相同的,说明当前的公共长度为dp[i-1][j-1]+1AC代码...
求逆序对数:最进刚刚学习的树状数组,一直感觉没啥用处,没想到根据树状数组的特殊结构求逆序对数还是挺方便的题目链接题意就是求逆序对: 给了n个数,但是数比较分散,所以我们需要用离散化一下,把分散的数转化为为紧凑而且好求的数,然后排一下序,之后求逆序数即可题解:由于给的数比较散,而且我们求逆序数只需要根据大小来判断逆序对数,所以把分散的数离散化一下,然后根据树状数组求一下逆序数即可如果不理解树
Bone Collect II题目链接第k解问题01背包动态规划求最<bits/stdc++.h>using namespace s...
一道权值线段树的题:也不算是板子题,变相求第k大题目链
题意:有 n个人m条信息,每条线信息有ABC三个整数表示,A比B少C个糖果,问n比1多多少个糖果题解:把信息不等式化 B-A<=C 也就是dis[v]<=dis[u]+w,当条件一定成立时,dis[u]+w最小的情况为dis[v]的解,也就是求1--->v的最短路径,这题需要模拟队列,不然会TLEAC代码:#include<cstdio>#incl...
题目链接多重背包变01背包题解:一道简单的01背包变形,看
一种新函数的学习bitset<n>a[n],tag,qn代表容器大小目前我还没理解,今天头有点晕,先记录下来,明天再看传送门题解:设三个二进制串a[],tag,q。 a[]记录输入串信息tag和q记录询问串,其中tag记录是否皆可0为是,1为明确;q在皆可时为0,在明确时记录准确的数字若询问的第i位为’_’,则tag[i]=0,q[i]=0。若第i位为0,则tag[i]=...
传送门题解:把数组排一下序,然后枚举当前的距离与mid的关系,当大于等于mid时,牛的数量++,然后二分枚举答案即可AC代码:#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;int n,k;int a[maxn];bool check(int mid){ int ans=1,st=a[0];
题意:第一行三个正整数,n,m,q,分别代表n头牛,m条信息和q条信息接下来m行,每行三个正整数 A B D,表示A 与 B之间的距离小于等于D,接下来q行每行三个正整数 A B D,表示 A与 B之间的距离大于等于D,求1号牛--->n号牛的最大距离题解:利用约束条件我们可以得:前m个条件可以得到:A-B<=D后q个条件可以得到:A-B>=D 变形得:B-A&l...
题目链接题意:任务一:要让所有点都收到软件,任务二:让所有点连通,需要再建几条边,使所有点连通题解:缩点之后,任务一:让所有点都有入点 任务二:当所有点都有入点和出点时,强通,求入点与出点的最大值AC代码:#include<cstdio>#include<vector>#include<algorithm>using names...
题目链接题意:给定一个序列s[ ],求一个p序列满足以s[i]为前p[i-1]项的和(p[i-1]项呈递减)--------举个例子 对于样例 0 0 0 样例 3 2 1 满足是小于p[i]的前p[i-1]项和为0题解:树状数组+二分,或线段树+二分,树状数组的树形结构可以满足线段树的作用,所以
这已经是我第三次学习线段树了 第一次学习线段树,是懵逼状态,第二次复习线段树,小有理解,这次也不知道会怎么样,但是还是准备再学习一下线段树,而且之前写的线段树讲解很粗糙为什么要学习线段树比如1---1e7这个区间,我想知道这个区间的和,用for循环可以写:for(int i=1;i<=1e7;i++)sum+=a[i];注意:每一个点的值是随机的,1--1e7并不呈线性这样求解的效率
题目:题解:一道典型的最长递增子序列问题不过是变成二维的,所以我们只需要用结构体快排它,让它变成我们想要的顺序即可,而且只让长大于宽AC代码:#include<bits/stdc++.h>using namespace std;#define maxn 1005struct node{ int lon,wid;//长和宽} temp[maxn];in...
前言:这题我不会,我是真的不会,数论一窍不通,我只负责记住结论Fansblog _题目链接快速测素数法:我把代码改成我喜欢用的模式quick_prime()由三部分组成一开始定义要测的素数ll prime[10]= {2,3,5,7,11,13,17,19,23,29};第一部分ll quick_mul(ll a,ll b,ll mod) //快速积{ long long ans=
4题解:一...
传送门题意: 给一个字符串s求子串满足:子串是s串的公共前后缀又在s串中出现过题解: 先求出next数组 ,得到最长公共前后缀,然后枚举公共前后缀,从大到小,看是否有满足情况的,如果有,break 然后输出子串pAC代码:#include<bits/stdc++.h>using namespace std;const int maxn=1e6+3;int
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号