简单动态规划+快排并排
3.24
暴富
编码有成
1024
1GB
一级棒
论如何变为一个算法大佬
|
|
|
|
|
01
简单动态规划
相信大家如果没怎么接触动态规划的话,见到这道题的时候应该和小编一样万脸懵逼,而这道题居然还贴上简单标签,真就把小编我不当人看呗。话不多说,开始讲题解。小编大概看了下大佬们写的,总体分两种:
第一种:使用一维数组动态规划
定义一个数组dp[max];
dp[i]表示(x1,x2,....xi)中的最长预约时间
递归的方程满足:dp[i]=max(dp[i-1],dp[i-2]+xi)
第二种:使用二维数组动态规划
这种可能比较好理解
dp[i][0]表示(x1,x2,....,xi)中不接受xi的最长预约时间
dp[i][1]表示(x1,x2,....,xi)中接受xi的最长预约时间
满足方程:
dp[i][0]=max(dp[i-1][1],dp[i-1][0]);
dp[i][1]=dp[i][0]+xi;
最后比较dp[max][0]和dp[max][1]大小即可
代码:
|
|
|
|
|
02
快速排序和归并
对于这道题,其实大家如果会使用stl中multiset等容器的话,或者就使用sort(&a[0],&a[max-1])函数也是可以做出来的,但是对于快排和并排这两种非常经典的,最好还是能手撸出来,下面就是小编比较喜欢的两个模板。
|
|
|
|
|
03
stl库的小知识
对于vector<int> p
向其中插入元素只能用p.push_back();
而对于map<int,int> p
则可采用p[1]=2;这种赋值方式
同时还有unordered_set和unordered_map;
这两个容器查找速度特别快,但是构造起来较慢。
写在最后:对于排序的题目还有大小堆的方式,小编明天抽时间尽量看懂然后推送给大家。最近小编比较想学动态规划那类的题目但是没有很多时间专门去看,所以呢小编从这周开始每周推出一次动态规划专题(食言莫怪手动狗头)。
哪些是你最迫切的心愿
世界和平
停止纷争
马上去旅游
战胜病毒
和自己和解
学会用秀米
掌握新知识
超越自己
● 越努力越幸运 ●