模拟题 动态规划
2017-06-26 00:40
197 查看
class Solution {
public:
int dis[1001][1001];
int min(int a,int b,int c)
{
b=b<c?b:c;
return a<b?a:b;
}
int minDistance(string w1, string w2) {
int l1=w1.length();
int l2=w2.length();
//initial: 由l1-》l2 三中操作 插入 删除 替换 起点: l1的所有 变换到l2的第一位 然后逐渐上shen到l2的全部
//so: l2*l1矩阵
int i,j;
for(i=0;i<l1+1;i++){
dis[0][i]=i;
}
for(i=0;i<l2+1;i++){
dis[i][0]=i;
}
//algor for every : new j++,we have : 1 [i][j]=[i-1][j]+1 插入一个相同的字母 2 [i+1][j]+1 对不起 想不清楚
//from s j 到 t i 过程中: (1)sj-1 ->ti-1 比较一下 s[j-1]==t[i-1] or +1;(2)s[j]->t[i-1] 则 插入t[i-1]+1 (3)s[j-1]->t[i] dels[j-1] +1
for(i=1;i<l2+1;i++){
for(j=1;j<l1+1;j++){
int eq=1;
if(w1[j-1]==w2[i-1])
eq=0;
dis[i][j]=min(eq+dis[i-1][j-1],dis[i-1][j]+1,dis[i][j-1]+1);
// cout<<dis[i][j]<<" ";
}
// cout<<endl;
}
return dis[l2][l1];
}
int maxSum(vector<int>& A) {
int n=A.size();
if(n==1)
return A[0];
int i,j;
int sum=1;
int* max=new int
;
max[0]=A[0];
max[1]=A[0]>A[1]?A[0]:A[1];
for(i=2;i<n;i++){
max[i]=(max[i-2]+A[i])>max[i-1]?(max[i-2]+A[i]):max[i-1];
}
return max[n-1];
}
};
int main(){
string a,b;
a="cafe";
b="a";
Solution s;
cout<< s.minDistance(a, b);
}
//int main(){
// vector<int> A;
// A.push_back(2);
// A.push_back(3);
// A.push_back(3);
// A.push_back(3);
// A.push_back(1);
// A.push_back(3);
// A.push_back(3);
// Solution S;
// cout<< S.maxSum(A)<<endl;
//
// return 0;
//}
public:
int dis[1001][1001];
int min(int a,int b,int c)
{
b=b<c?b:c;
return a<b?a:b;
}
int minDistance(string w1, string w2) {
int l1=w1.length();
int l2=w2.length();
//initial: 由l1-》l2 三中操作 插入 删除 替换 起点: l1的所有 变换到l2的第一位 然后逐渐上shen到l2的全部
//so: l2*l1矩阵
int i,j;
for(i=0;i<l1+1;i++){
dis[0][i]=i;
}
for(i=0;i<l2+1;i++){
dis[i][0]=i;
}
//algor for every : new j++,we have : 1 [i][j]=[i-1][j]+1 插入一个相同的字母 2 [i+1][j]+1 对不起 想不清楚
//from s j 到 t i 过程中: (1)sj-1 ->ti-1 比较一下 s[j-1]==t[i-1] or +1;(2)s[j]->t[i-1] 则 插入t[i-1]+1 (3)s[j-1]->t[i] dels[j-1] +1
for(i=1;i<l2+1;i++){
for(j=1;j<l1+1;j++){
int eq=1;
if(w1[j-1]==w2[i-1])
eq=0;
dis[i][j]=min(eq+dis[i-1][j-1],dis[i-1][j]+1,dis[i][j-1]+1);
// cout<<dis[i][j]<<" ";
}
// cout<<endl;
}
return dis[l2][l1];
}
int maxSum(vector<int>& A) {
int n=A.size();
if(n==1)
return A[0];
int i,j;
int sum=1;
int* max=new int
;
max[0]=A[0];
max[1]=A[0]>A[1]?A[0]:A[1];
for(i=2;i<n;i++){
max[i]=(max[i-2]+A[i])>max[i-1]?(max[i-2]+A[i]):max[i-1];
}
return max[n-1];
}
};
int main(){
string a,b;
a="cafe";
b="a";
Solution s;
cout<< s.minDistance(a, b);
}
//int main(){
// vector<int> A;
// A.push_back(2);
// A.push_back(3);
// A.push_back(3);
// A.push_back(3);
// A.push_back(1);
// A.push_back(3);
// A.push_back(3);
// Solution S;
// cout<< S.maxSum(A)<<endl;
//
// return 0;
//}
相关文章推荐
- NOIP模拟题 2016.11.9 [动态规划] [数论] [二分答案] [启发式合并] [线段树] [树链剖分]
- NOIP模拟题 2016.11.11 [搜索] [动态规划] [网络流] [字符串处理]
- NOIP模拟题 2016.11.12 [Catalan数] [贪心] [动态规划] [DLX] [数独]
- 【NOIP模拟题】【贪心】【动态规划DP】2016.11.12第二题题解
- 模拟题 动态规划
- 【NOIP模拟题】【动态规划DP】2016.11.11第二题Landscaping题解
- 动态规划~数塔问题
- 动态规划(奇异状态):HNOI 2001 产品加工
- 青蛙过桥——动态规划
- 【动态规划】矩阵连乘问题
- hdu-1003-Max Sum-动态规划dp
- 算法java实现--动态规划--电路布线问题
- 动态规划之游艇租用问题
- 51nod 循环数组最大子段和(动态规划)
- 动态规划解343. Integer Break
- [ACM] poj 1141 Brackets Sequence (动态规划)
- hdu 5616 Jam's balance ( 动态规划 )
- Leetcode解题笔记 63. Unique Paths II [Medium] 动态规划
- 动态规划
- 邮票问题-动态规划