摘要:
具有阶段性的问题可以采用回溯的方法,选择深度遍历的方法将所有的可能性遍历出来,在这过程中去掉一些不可能的分支。 #include<iostream> #include<bits/stdc++.h> #include<cstdio> using namespace std; int n; vector 阅读全文
摘要:
求出字符每个出现的个数,出现一对就回文串大小加2,出现落单的一个就存起来。计算完所有一对的字符之后,如果之前有保存有落单的字符,那么最后的回文串大小加1,得到最大回文串的长度。 #include<iostream> #include<bits/stdc++.h> #include<cstdio> u 阅读全文
摘要:
用单调栈的想法,最先进栈的肯定比最后进栈的小。 贪心的话就是确保第一个数是最小的就可以确保整个数是最小的。比如:200>100 最后做一个出栈处理,保证数值最后输出是200,不是0200,还有就是如果栈里面什么都没有即所有位的数值都被消去的话,要输出0。 #include<iostream> #in 阅读全文
摘要:
动态规划的想法就是之前的状态是已经算好所有的回文子串了,然后多了一个字符,就把之前所有和最后的字符连接在一起的回文子串的前一个字符和新字符对比,如果一样,那么构成新的回文子串。 比如:babaa+b, 之前的连接到最后字符的回文子串有aa,a, aa前的b和新字符b一致,那么多了新回文子串baab。 阅读全文
摘要:
01背包问题,每件物品都有放和不放这两种选择。 使用动态规划思想:有n件物品情况下的总价值最大背包和有n-1件物品情况下的总价值最大背包有关。 我也讲不大明白,对背包问题有兴趣的可以去这看看:https://zhuanlan.zhihu.com/p/93857890 #include<iostrea 阅读全文
摘要:
动态规划当前状态和前一状态相关。到m阶楼梯的方法等于到m-1和m-2的方法相加 #include<iostream> #include<bits/stdc++.h> #include<cstdio> using namespace std; int n; int cnt[25]; int main( 阅读全文
摘要:
要知道走到(m,n)有多少种方法,那就要知道走到前一步的位置有多少种方法,即将走到(m-1,n)和(m,n-1)的方法相加。 #include <iostream> #include <bits/stdc++.h> using namespace std; int nums[15][15]; int 阅读全文
摘要:
动态规划当前状态和之前状态息息相关。比如这题:组成硬币,已经组成好的硬币x加上面值为y的硬币就可以组成好x+y的硬币。所以要算出组成x+y的硬币,就要先算出组成x的硬币。可以用循环从x=0开始计算。 #include <iostream> #include <bits/stdc++.h> using 阅读全文
摘要:
多个判断,简单题 #include <iostream> #include <bits/stdc++.h> using namespace std; int bills[3]={0}; int main() { bool flag=true; while(1){ int ret; int bill; 阅读全文
摘要:
采用归并算法,先将一个链表分成两个链表,分到不能再分,然后再将已经排好序的链表有序地归并起来。 主要问题:1. 一个子链表如何分成两个。2. 释放空间的问题(没有实现) #include<iostream> #include<bits/stdc++.h> #include<cstdio> using 阅读全文