摘要:
大致题意:给定一个字符串,添加字符,使该字符串左右对称,求添加字符数最少。设原序列S的逆序列为S' ,则这道题目的关键在于,最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度静态数组开销大小为5001*5001的int是铁定超的.据说用short int的话不会MLE,有兴趣的同学可以试试这里重点讲一下滚动数组在这个题目中的应用.自己目前理解的应用滚动数组的目的就是减少空间开销.首先可以在纸上简单模拟一下DP的转移过程.确定好最少行数或者列数之后,重点就是在如何进行"滚动"以及如何用表达式控制这个滚动.对于本题,我用的是行数以0--1- 阅读全文
摘要:
问题:C语言中有struct自定义结构体类型;C++中也有struct类型,而且,与C++中面向对象主要的数据类型class还极为相似。那么,C++中struct和class之间有什么区别,什么情况下使用struct呢?解决办法:从C++语言设计者Bjarne Stroustrup的大作《C++编程语言(特别版)》中归纳C++中struct和class的区别,有以下几点:1. 成员的默认访问权限。struct的成员默认是public的;class的成员默认是private的;2. 默认继承权限。在没有明确指定的情况下,struct的默认继承方式是public,class的默认继承方式是priv 阅读全文
摘要:
题意:是求最长公共子序列的一个变型题;此题中的字符只有A,G,C,T四个,再加上'-';它们之间的不同匹配有对应的不同权值W;而且只有字符相同的匹配的权值为大于0;其他都为负值。此题就是求权值最大的匹配。f[i][j]: 表示第一个字符串的前 i 个字符和第二个字符串的前 j 个字符的最大权值。状态方程:f[i][j]=max(f[i-1][j]+w[a[i]]['-'],f[i][j-1]+w['-'][b[j]],f[i-1][j-1]+w[a[i]][b[j]]);// Time 16ms; Memory 324K#include
usin 阅读全文
摘要:
大致题意:输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线。规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个数中的一个。f[i][j]:表示第 i 行第 j 列到最后一行的最大权值和;状态方程:f[i][j]=w[i][j]+max(f[i+1][j],f[i+1][j+1]);// Time 157ms; Memory 1236K#include
using namespace std;
int max(int a,int b)
{ return a>b?a:b;
}
int main()
{ int i,j,n,w[355][35 阅读全文