顺丰20180917

#include <iostream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;


/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^ 
******************************开始写代码******************************/
int candy(vector < double > numbers) {

	int sum = 0;
	vector<int> v1;
	if (numbers.size() != 0)
	{
		int num = 1;
		v1.push_back(num);
		if (numbers.size() == 1)
			return 1;
		for (size_t i = 1; i != numbers.size(); ++i)
		{
			if (numbers[i] > numbers[i - 1])
			{
				num++;
			}
			else
			{
				num = 1;
			}
			v1.push_back(num);
		}
		sum += num;
		for (size_t i = numbers.size() - 2; i != -1; --i)
		{
			if (numbers[i] > numbers[i+1])
			{
				num=v1[i+1]+1;
				if (num < v1[i])
					num = v1[i];
				v1[i] = num;
			}
			else
			{
				num = v1[i];
			}
			sum += num;
		}
	}	
	return sum;

}
/******************************结束写代码******************************/


int main() {
    int res;

    int _numbers_size = 0;
    cin >> _numbers_size;
    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n'); 
    vector<double> _numbers;
    double _numbers_item;
    for(int _numbers_i=0; _numbers_i<_numbers_size; _numbers_i++) {
        cin >> _numbers_item;
        cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
        _numbers.push_back(_numbers_item);
    }    
    
    res = candy(_numbers);
    cout << res << endl;
    
    return 0;

}
#include <iostream>
#include <vector>
#include <numeric>
#include <limits>

using namespace std;

int minimum(int a, int b, int c){
	int m = a;
    if(b<m)
        m=b;
    if(c<m)
        m=c;
    return c;
}

/*请完成下面这个函数,实现题目要求的功能
当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
******************************开始写代码******************************/
int change(string str1, string str2) {
	int n = str1.length();
	int m = str2.length();
	if (m == 0) return n;
	if (n == 0) return m;

	typedef vector< vector<int> >  Tmatrix;
	Tmatrix matrix(n + 1);
	for (int i = 0; i <= n; i++)  matrix[i].resize(m + 1);

	for (int i = 1; i <= n; i++) matrix[i][0] = i;
	for (int i = 1; i <= m; i++) matrix[0][i] = i;

	for (int i = 1; i <= n; i++)
	{
		const char si = str1[i - 1];
		for (int j = 1; j <= m; j++)
		{

			const char dj = str2[j - 1];
			int cost;
			if (si == dj){
				cost = 0;
			}
			else{
				cost = 1;
			}
			const int above = matrix[i - 1][j] + 1;
			const int left = matrix[i][j - 1] + 1;
			const int diag = matrix[i - 1][j - 1] + cost;
			matrix[i][j] = minimum(above, left, diag);

		}
	}
	return matrix[n][m];
}


/******************************结束写代码******************************/


int main() {
    int res;

    string _str1;
    getline(cin, _str1);
    string _str2;
    getline(cin, _str2);

    res = change(_str1, _str2);
    cout << res << endl;

    return 0;

}

第二题:有 N 个小孩站成一列,每个小孩手中有一个随机数,按照以下规则分配糖果:

1、如果某个小孩手中的随机数比旁边的大,他分到的糖果数目就要比旁边的多;

2、每个小孩至少得到一颗糖果;

问:需最少准备多少糖果?

第一题:实现两个字符串之间的Levenshtein Distance(编辑距离)

猜你喜欢

转载自blog.csdn.net/u012879957/article/details/82748643