再次探究复制问题的解法.
2015-11-26 15:18
183 查看
如何将一个字符迅速复制粘贴到N个字符?同样采取动态规划的方法,但是这次的方法更加基础和容易理解.虽然效率变差了.
我们将建造一个状态空间,它有两个变量,当前的字数和粘贴板上面的字数.可以考虑到所求为F
[M],M应该小于等于N/2;注意到当M<N/3
时,它可能是由F[N-1][M]写入一个字符得到,也可能是由F[N-M][M]进行一次粘贴得到.当M>N/3时,它只可能是由F[N-1][M]得到的.同时注意F
[N/2]的计算比较特殊,它是由min{F[N/2]k}+4得到:选中,复制,粘贴2次.
#include "iostream" #include "vector" #include "algorithm" using namespace std; int main() { vector<vector<int>> F; vector<int> T; F.resize(101); T.resize(101); T[0] = 0; T[1] = 1; F[1] = { 1,2 }; for (int i = 2; i != 101; ++i) { F[i].resize(i/2 + 1,1000); F[i][0] = i; for (int j = 1; j != i/3 +1 ; ++j) F[i][j] = min(F[i - j][j] + 1,F[i-1][j]+1); for (int j = i / 3 + 1; j <= (i / 2)-1; ++j) F[i][j] = F[i - 1][j] + 1; if (!(i%2)) F[i][i/2] = min(F[i][i/2],T[i/2] + 4); T[i] = *min_element(F[i].begin(), F[i].end()); } return 0; }
相关文章推荐
- java ibatis 读取mysql blob类型乱码 spring mvc文件下载csv文件乱码
- 常用分词算法笔记
- 里氏替换原则
- 有用的网站
- 将stdole.IPictureDisp类型的图片转换为image
- JavaSE(06)(StringBuffer类总结)
- 实现 select中指定option选中触发事件
- [FZOJ2150]Fire Game 技巧BFS
- 1.3 hibernate annotation环境搭建及简单的例子
- 读取文件2+root画图
- ubuntu系统中PATH变量被修改,导致系统一直停留在登陆界面
- Assembly的load, loadfrom, loadfile方法总结
- 请求,转发及session
- php 接受json数据时有转义字符处理办法
- 支付宝拼接URL的¬ify_url显示不正常
- hadoop之combiners编程
- 英文短信和聊天时常用的缩写
- node
- Qt树形控件QTreeView使用1——节点的添加删除操作
- Predicate<T>与Func<T, bool>泛型委托