思维
qq_43674811
这个作者很懒,什么都没留下…
展开
-
蓝桥杯 四平方和 数的分解(简单dfs,算法时间复杂度优化)
题目 程序输入为一个正整数N (N<5000000) 要求输出4个非负整数,按从小到大排序,中间用空格分开 例如,输入: 5 则程序应该输出: 0 0 1 2 再例如,输入: 12 则程序应该输出: 0 2 2 2 再例如,输入: 773535 则程序应该输出: 1 1 267 838 资源约定: 峰值内存消耗 < 256M CPU消耗 < 3000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意原创 2021-04-13 11:06:22 · 390 阅读 · 0 评论 -
蓝桥杯剪邮票(状态编码,非迷宫式dfs,必看)
文章转载自传送门 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=10000; int hash[maxn]; int vis[3][4]; int tol; int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}}; void dfs(int cnt){ if(cnt==5){ int tmp=0; f原创 2021-04-13 02:10:19 · 67 阅读 · 0 评论 -
蓝桥杯(矩阵)(求方案种类数)(动态规划)
题目 解析 假如要将1~4按次序填入2*2的方格中,有如下两种方案: 这里有性质:填数时上面一行的列数一定大于等于下面一行的列数。因为我们是按从小到大的顺序填数的,这样才能保证同一列中下面一行的数要大于上面一行。 这里假设dp[i][j]为第一行放i个数,第二行放j个数的方案数,i的范围为0 ~ 1010,j的范围为0 ~ i。 求方案数:放置第n个数在i行j列的方案数,上一步可能是放第n-1个数在i-1行j列,或是放第n-1个数在i行j-1列:dp[i][j]=dp[i-1][j]+dp[i][j-1]原创 2021-03-31 17:32:22 · 943 阅读 · 0 评论 -
蓝桥杯子串分值(时间复杂度优化)
题目 f(“aba”)=1 因为b恰好出现一次 解析 参考博客:传送门 这里依然以abaca为例, 当遍历到i=1(字符a时),该字符贡献的子串数为:左侧只能不选,右侧可以不选或是选1个,所以种类数为12=2; 当遍历到i=2(字符b时),该字符贡献的子串数为:左侧可以不选或是选1个,右侧可以不选或是选1,2,3个,所以种类数为24=8; 当遍历到i=3(字符a时),该字符贡献的子串数为:左侧可以不选或是选1个,右侧可以不选或是选1个,所以种类数为2*2=4; 以此类推。 AC代码 #include&原创 2021-03-28 11:25:42 · 253 阅读 · 0 评论 -
删数问题(贪心)
题目 https://www.luogu.com.cn/problem/P1106 解析 175438要删一个数,使得剩下的数最小 错误贪心策略:总是删除最大的那个数,如175438删除8得到17543;明显不如删除7得到15438小;所以应该对贪心做一些限制 正确的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去。我们想让处在高位的数字尽量小,如1781如果删除7的话,8会顶替7称为新的高位(181),其效果就不如删除8好(171) 如果数列是递增的,则删除最大的那个数,即最后一个数字;否则就删除第原创 2021-03-27 01:17:09 · 296 阅读 · 0 评论 -
蓝桥杯排队打水问题(贪心)
题目 https://www.dotcpp.com/oj/problem1527.html 解析 题意:每个人要打水,这个人所花费的时间等于他前面的人花费的时间加上自己打水的时间。总花费时间等于每个人的花费的时间的总和。 贪心原则:排队时越靠近前面的人花费的时间被后面的人加上计算的次数越多,假如有3个人依次排队(用时分别为T1,T2,T3),一个水管,则总时间为3T1+2T2+T3。因此打水时间少的人应该先打水。 基本操作: (1):将打水时间按从小到大先后排序 (2):将排序后的时间按顺序依次放入每个水龙原创 2021-03-26 23:16:47 · 585 阅读 · 0 评论 -
蓝桥杯k倍区间(时间复杂度优化)
题目 http://lx.lanqiao.cn/problem.page?gpid=T444 解法 #include<bits/stdc++.h> using namespace std; //连续子序列求和:前缀和 //k倍区间:(sum[r]-sum[l-1])%k==0 推出 sum[r]%k==sum[l-1]%k,同余 //假如mod[m]=x,含义为:余数为m的sum个数为x,从x个数中选2个:组合数Cx2,它们两个数相减就是K倍区间,因为这x数都是同余的。 const int m原创 2021-03-26 20:38:12 · 72 阅读 · 0 评论 -
Ball in berland(代码时间复杂度优化)
题目 https://codeforces.ml/contest/1475/problem/C 题目翻译参考:https://blog.csdn.net/qq_43697906/article/details/113241534原创 2021-03-26 19:31:46 · 114 阅读 · 0 评论