![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Openjudge
Melancholy_◢◤
Avicii Forever
展开
-
Openjudge 9281:技能树
Openjudge 9281:技能树题目传送门大致题意:要求二叉树中每个节点的子节点数为0或2,求有N个节点高度为M的不同的二叉树有多少个(输出 mod 9901 后的结果)。思路:用dp[i][j]表示高度为i,节点数为j的树的种类树,则一棵高度为i,节点数为j(j>1)的树,拿掉根结点之后,可以分为一棵高度为i-1的子树和另一棵一棵高度小于等于i-1的子树。其中高度为i-1的子树可能是左子树,也可能是右子树。先假定是左子树,则左子树的节点数目k可能是[1,j-2],(有一棵子树存在时另一原创 2021-06-22 19:43:29 · 1172 阅读 · 0 评论 -
OpenJudge2.6基本算法之动态规划9267:核电站
OpenJudge2.6基本算法之动态规划9267:核电站题目传送门这题和放苹果挺类似的,都是要分情况讨论i和m的大小关系case1:如果i<m这说明在这段区间里怎么放都不会炸,那么状态转移方程就是:a[i]=2*a[i-1].(乘2是因为每个坑有放和不放两种情况)case2:如果i==m情况同case1,只是要减去区间全放(会炸)的情况,那么状态转移方程就是:a[i]=2*a[i-1]-1.case3:如果i>m这是就要考虑会炸的情况了。我们采用减法的方式——即从总情况里减去会原创 2021-05-27 20:59:13 · 686 阅读 · 0 评论 -
Openjudge2.6基本算法之动态规划747Divisibility&&3531判断整除
Openjudge2.6基本算法之动态规划 747Divisibility&&3531判断整除Divisibility题目传送门判断整除题目传送门今天做到Divisibility的时候发现题面很眼熟呀,往前一翻果然看到了重题判断整除还wa着,正好一遭做了双倍经验。拿到题第一反应就是暴搜,就opj这么水的数据肯定能过 ,但是既然在动态规划里,还是要想想dp做法的。状态定义就挺奇怪:定义f[i][j]表示前i个数的组合整除k能否使余数为j 以前从来没遇到过类似的 状原创 2021-05-23 14:20:36 · 198 阅读 · 0 评论 -
Openjudge2.6基本算法之动态规划8471:切割回文
Openjudge2.6基本算法之动态规划8471:切割回文题目传送门最近做了几道同类型的题,像这种按条件分割区间的题一般都需要先预处理出任意i到j区间是否符合条件所以:for(int k=1;k<=len;k++) { for(int i=1;i+k-1<=len;i++) { int j=k+i-1; if(k<=2) { if(s[i]==s[j]) b[i][j]=1; } else {原创 2021-05-22 17:30:58 · 285 阅读 · 0 评论 -
OpenJudge2.6基本算法之动态规划8782:乘积最大
OpenJudge2.6基本算法之动态规划8782:乘积最大题目传送门这道题的dp思路还是挺好想的……设dp[i][j]表示前i个数里有j个乘号……(未完待续)原创 2021-05-20 21:00:56 · 254 阅读 · 1 评论 -
动态规划之最长公共上升子序列(LCIS)算法及优化&&Openjudge2000:最长公共子上升序列
动态规划之最长公共上升子序列(LCIS)算法及优化例题题目传送门描述给定两个整数序列,写一个程序求它们的最长上升公共子序列。当以下条件满足的时候,我们将长度为N的序列S1 , S2 , . . . , SN 称为长度为M的序列A1 , A2 , . . . , AM 的上升子序列:存在 1 <= i1 < i2 < . . . < iN <= M ,使得对所有 1 <= j <=N,均有Sj = Aij,且对于所有的1 <= j < N原创 2021-05-16 15:48:18 · 2810 阅读 · 6 评论 -
Openjudge题库更新了!!!
Openjudge题库更新了!!!这应该是信竞生涯唯一一次看到Openjudge更新了吧……原创 2021-05-16 11:03:32 · 612 阅读 · 0 评论 -
Openjudge - 7627:鸡蛋的硬度
Openjudge - 7627:鸡蛋的硬度题目传送门这个题卡了能有一个星期了,终于过了!首先是样例啊!这阴间样例,我到现在没明白!所以以后再看不明白样例就去想思路吧……状态转移方程:f[i][j]=min(f[i][j],max(f[i-1][m-1],f[n-i][m])+1);这个状态转移方程是什么意思呢?我们先来放一张图我们假设在黄色处释放一个鸡蛋,这个黄色位置是我们从1到i枚举的一个中间位置,如果蛋碎了,那么我们就需要把高度降1,并且鸡蛋数减1,这就是f[i-1][m-1]的意思。原创 2021-05-15 17:30:27 · 176 阅读 · 0 评论 -
OPJ400题祭!!!
OPJ400题祭!!!其实是402题……一不留神多做了两道……原创 2021-04-27 20:54:46 · 63 阅读 · 0 评论 -
OPJ2.5基本算法之搜索200:Solitaire
OPJ2.5基本算法之搜索200:Solitaire题目传送门看网上的题解有点少,我就来水 写一篇博客,给有需要的宝宝们**思路:**八维数组!同时搜四个点!干就完了!虽然OPJ的数据水,但还是要有一些阴间卡内存的,具体看代码。AC代码:#include<bits/stdc++.h>using namespace std;bool vis[8][8][8][8][8][8][8][8];int g[10][10];int fx[][2]={1,0,-1,0,0,1,0,-1};原创 2021-04-18 21:42:41 · 2121 阅读 · 0 评论 -
OPJ2.5基本算法之搜索2152:Pots
OPJ2.5基本算法之搜索2152:Pots题目传送门卡了好久的搜索题呀!今天看了别人的题解终于是弄会了。之所以卡了这么长时间是因为这个广搜题和其他在地图上的广搜不一样,有点无从下手。思路就是枚举每次操作,虽说给了3个操作,但是对于两个杯子来说其实是6个操作。比较新奇的思路就是用一个repeat[][]数组记录当前两杯水的量是否被搜过,还有最后输出操作的时候是按存好的前驱递归输出的。最近发现好像要输出中间过程的题都可以在算法进行过程中记录前驱然后递归输出,目前发现适用于DP和搜索AC代码:原创 2021-04-18 21:05:59 · 230 阅读 · 0 评论 -
OPJ2.1基本算法之枚举&&7217:猴子吃桃
OPJ2.1基本算法之枚举&&7217:猴子吃桃题目传送门思路:就是一个脑筋急转弯……(话说这一章有好多脑筋急转弯问题……)因为每次分的时候,都会多出来一个,对于N个猴子,如果给这堆桃子补上N-1个,就不用再余出来了在第一条的基础上,假设总的桃子数目X个,第一只猴子分走了总数的N分之一,所以剩下N-1/N的桃子。对于第二只猴子,同理此时桃子总数N-1/N的1/N份被取走,就剩下((N-1)/N)*X的桃子。以此类推。。最终最后一个猴子得到的是((N-1)/N)的N次方乘以X的桃子原创 2021-04-04 18:08:34 · 733 阅读 · 0 评论 -
OPJ2.1基本算法之枚举&&1815:画家问题
OPJ2.1基本算法之枚举1815:画家问题题目传送门描述有一个正方形的墙,由N*N个正方形的砖组成,其中一些砖是白色的,另外一些砖是黄色的。Bob是个画家,想把全部的砖都涂成黄色。但他的画笔不好使。当他用画笔涂画第(i, j)个位置的砖时, 位置(i-1, j)、 (i+1, j)、 (i, j-1)、 (i, j+1)上的砖都会改变颜色。请你帮助Bob计算出最少需要涂画多少块砖,才能使所有砖的颜色都变成黄色。输入第一行是一个整数n (1≤n ≤15),表示墙的大小。接下来的n行表示墙的初始原创 2021-04-02 22:31:04 · 337 阅读 · 0 评论 -
OPJ 2.1基本算法之枚举&&:熄灯问题
OPJ 2.1基本算法之枚举1813:熄灯问题题目传送门个人认为这是这一章为数不多不水的题之一……可能是我太弱了思路:既然这道题是枚举“算法”里的,那肯定就是要枚举。那么我们枚举什么呢?认真读题不难发现:只要确定了第一行的灯的状态就可以推出其余4行!那么我们枚举的思路就是枚举第一行灯的状态!有了思路代码就还挺好写了,就是细节有亿点多……具体见注释调了好长时间AC代码:#include<bits/stdc++.h>using namespace std;int ini[5原创 2021-04-01 21:54:29 · 181 阅读 · 1 评论 -
OPJ1.13编程基础之综合应用
POJ1.13编程基础之综合应用23:区间内的真素数题目传送门写这个题解就是为了记录一下一个找质因子的新思路(对于我来说),虽然效率可能不太高,但是觉得这个思路挺好玩的……#include<bits/stdc++.h> using namespace std;int sum[100];int main(){ int n; cin>>n; int num=n; int k=2; while(n>1) { if(n%k==0) { sum[原创 2021-03-28 17:28:38 · 246 阅读 · 0 评论 -
Openjudge2.6基本算法之动态规划8464:股票买卖
Openjudge2.6基本算法之动态规划8464:股票买卖题目传送门刚开始看书上的代码还是挺懵逼的……两次循环处理分别是求从0到第i天获得的最大利润和从第i天到第n天获得的最大利润,然后从1到n找出两者相加的最大值即可。注意:cin,cout会超时!!!所以要用黑科技!!!(或scanf,printf)AC代码:#include<bits/stdc++.h>using namespace std;const int maxn=100100;int t,n,ans,price[m原创 2021-05-16 11:10:34 · 247 阅读 · 0 评论