您的位置:首页 > 其它

模拟题 动态规划

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;

//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: