poj 1458 C++解法

考察知识:动态规划


    #include <iostream>
    using namespace std;

    int c[1000][1000];

    int lcs(char* x, char* y, int m, int n) {
        int i,j;
        for (i = 0; i < m; i++) 
            c[i][0] = 0;
        for (i = 0; i < n; i++)
            c[0][i] = 0;
        for (i = 0; i < m; i++)
            for (j = 0; j < n; j++) {
                if (x[i] == y[j] ) {
    				if (i >= 1 && j >= 1)					
                     c[i][j] = c[i - 1][j - 1] + 1;
    				else 
    					c[i][j] = 1;
                } else if (c[i - 1][j] >= c[i][j - 1]) {
    				if (i >= 1)
                     c[i][j] = c[i - 1][j];
    				else 
    					c[i][j] = 0;
                } else {
    				if (j >= 1)
                     c[i][j] = c[i][j - 1];
    				else
    					c[i][j] = 0;
                }
    			//cout << "i" << i << "j" << j << "value" << c[i][j] << endl;
            }
    	//cout << x << y <<"m"<< m <<"n"<< n <<endl;
    	return c[m - 1][n - 1];
            
    }

    int main(int argc, char *argv[])
    {
    	char* input1 = new char[1000];
    	char* input2 = new char[1000];
    	while (cin >> input1 >> input2) {
    		cout << lcs(input1, input2, strlen(input1), strlen(input2)) << endl;
    	}
    	delete input1;
    	delete input2;
        return 0;
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值