c_cpp 提高cin和cout IO速度
`cin`和`cout`之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消`iostream`的输入输出缓存,节省了许多时间,使效率与scanf与printf相差无几。<br/> <br/> [关于ios :: sync_with_stdio(false);和cin.tie(0)加速c ++输入输出流](https://www.cnblogs的.com / PrayG / p / 5749832.html)
c_cpp SUBSTR()
c_cpp DAG最长路径
```美人鱼<br/>图LR <br/>开始 - >停止<br/>```
c_cpp 最长的对称子串
最长回文子串<br/> <br/> ## Q <br/> <br/>求字符串`S`的最长回文子串的长度。<br/> <br/>``` <br/>样本输入:<br/> PATZJUJZTACCBCC <br/>样本输出:<br/> 9(ATZJUJZTA)<br/>``` <br/> <br/> ## A <br/> <br/> - `dp [i] [j]`:`S [i]`至`S [j]`所表示的子串是否是回文子串,是则是`1`,不是则为`0 `。<br/> - `return max(dp)`<br/> - `dp [i] [j] = dp [i + 1] [j - 1],S [i] == S [j] `<br/> - `dp [i] [j] = 0,S [i]!= S [j]`<br/> - `dp [i] [i] = 1,dp [i] [i +1] =(S [i] == S [i + 1])? 1:0` <br/> - `O(n ^ 2)`<br/> <br/> --- <br/> <br/>最长回文子串问题还有一些其他做法,例如`二分+字符串hash`复杂度为`O(n logn)`,最优秀的当属复杂度为`O(n)`的`Manacher`算法。<br/> <br/>
c_cpp 最大子序列和
最大连续子序列和<br/> <br/> ## Q <br/> <br/>给定一个数字序列`A1,A2,...,An`,求`i,j(1 <= i <= j <= n)`,使得`Ai + ... + Aj`最大,输出这个最大和。<br/> <br/>``` <br/>样本输入:<br/> 6 <br/> -2 11 -4 13 -5 -2 <br/>样本输出:<br/> 20(11 +( - 4)+ 13 = 20)<br/>``` <br/> <br/> ## A <br/> <br/> - `dp [i]`:**以'A [i]`结尾**的连续序列的最大和<br/> - `return * max_element( dp,dp + n)`<br/> - `dp [i] = max {A [i],dp [i - 1] + A [i]}`<br/> - `dp [0] = A [0]`<br/> - `O(n)`,借助`STL`可以降到`O(n logn)`<br/> <br/>``` <br/> 0 1 2 3 4 5 <br/> -2 11 -4 13 -5 -2 <br/>``` <br/> <br/>``` <br/> dp [0] = -2 <br/> dp [ 1] = 11 <br/> dp [2] = 11 +( - 4)= 7 <br/> dp [3] = 7 + 13 = 20 <br/> do [4] = 20 +( - 5) = 15 <br/> dp [5] = 15 +( - 2)= 13 <br/>``` <br/>
c_cpp dcmotor_helloworld.ino
c_cpp 格式化输出小数
##引用<br/> <br/> - [C ++ - cout输出小数点后指定位数](https://blog.csdn.net/edricbjtu/article/details/41082597)<br/>
c_cpp 数塔问题
## Q <br/> <br/>把一些数字排成数塔的形状,第`i`层有`i`个数字(`1 <= i <= n`)。从第一层走到第n'层,每次只能走向下一层连接的两个数字中的一个,将路径上的所有数字相加后得到的和最大是多少❓<br/> <br/>`` <br/> 15 <br/> / \ <br/> / \ <br/> 8 3 <br/> / \ / \ <br/> / \ / \ <br/> 4 17 6 <br/> / \ / \ / \ <br/> / \ / \ / \ <br/> 4 19 13 4 <br/> / \ / \ / \ / \ <br/> / \ / \ / \ / \ $ <br/> 9 25 43 49 1 <br/>``` <br/> <br/> ## A <br/> <br/> - `dp [i] [j]`:从第`i`层,第`j`个数字走到最底层得到的最大和<br/> - `return dp [1] [1]` <br/> - `dp [i] [j] = max(dp [i + 1] [j],dp [i + 1] [j + 1])+ f [i] [j];`<br/> - `dp [n] [j] = f [n] [j],1 <= j <= n` <br/> <br/>
c_cpp 数塔问题
## Q <br/> <br/>把一些数字排成数塔的形状,第`i`层有`i`个数字(`1 <= i <= n`)。从第一层走到第n'层,每次只能走向下一层连接的两个数字中的一个,将路径上的所有数字相加后得到的和最大是多少❓<br/> <br/>`` <br/> 15 <br/> / \ <br/> / \ <br/> 8 3 <br/> / \ / \ <br/> / \ / \ <br/> 4 17 6 <br/> / \ / \ / \ <br/> / \ / \ / \ <br/> 4 19 13 4 <br/> / \ / \ / \ / \ <br/> / \ / \ / \ / \ $ <br/> 9 25 43 49 1 <br/>``` <br/> <br/> ## A <br/> <br/> - `dp [i] [j]`:从第`i`层,第`j`个数字走到最底层得到的最大和<br/> - `return dp [1] [1]` <br/> - `dp [i] [j] = max(dp [i + 1] [j],dp [i + 1] [j + 1])+ f [i] [j];`<br/> - `dp [n] [j] = f [n] [j],1 <= j <= n` <br/> - `O(n ^ 2)`<br/>
c_cpp 布设()
- `map`容器的成员函数`emplace()`可以在适当的位置直接构造新元素,从而**避免复制和移动操作**。<br/> <br/> - 只有当容器中现有元素的键与这个元素的键不同时,才会构造这个元素。<br/> <br/> --- <br/> <br/> - 成员函数`emplace()`和`insert()`返回的'pair`对象提供的指示相同。<br/> <br/> - `对`的成员变量`first`是一个指向插入元素或阻止插入的元素的迭代器; <br/> <br/> - 成员变量`second`是个布尔值,如果元素插入成功,`second`就为`true`。<br/> <br/>``` <br/> map <Name,size_t> people; <br/> auto pr = people.emplace(Name {“Dan”,“Druff”},77); <br/> auto iter = people.emplace_hint(pr.first,Name {“Cal”,“Cutta”},62); <br/>``` <br/> <br/>