算法设计与分析作业贪心法

1.暑假,小民和弟弟一起玩数字接龙游戏。将n(2≤n≤20)个正整数A1...An(1≤Ai≤1000)任意次序排列首尾连接,拼接成一个新的整数;接龙而成的整数更大者获胜。请你帮助小民编写一个程序构造出最大的整数吧。

【Input】

输入共两行;第一行有一个整数,表示数字个数 n;第二行有 n 个整数,表示给出的 n 个整数 Ai。

【Output】  一个正整数,表示最大的整数。

Sample Input 1 】

3

13 312 343

【Sample Output 1】

34331213

#include 
#include 
#include 
#include 
#include
using namespace std;
 
bool cmp(string i,string j)
{
    return (i+j)>(j+i);//提供排序规则
}
 /*
 Sort(start,end,cmp)
参数
(1)start表示要排序数组的起始地址;
(2)end表示数组结束地址的下一位;
(3)cmp用于规定排序的方法,可不填,默认升序。
 sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。
一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)。而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。
 */
int main()
{
    vector vec;
    int num;
    cin>>num;
    for(int i = 0; i < num; ++i)
    {
        string temp;
        cin>>temp;
        vec.push_back(temp);
    }
    sort(vec.begin(),vec.end(),cmp);
    for(vector::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        cout<<(*it);
    }
    cout<

2. 小民家里养不少小兔子,他每天放学都会拿着一筐胡萝卜去喂它们。

已知小兔子i希望最少能得到gi克的胡萝卜,如果胡萝卜j的重量wj>=gi,小民就将胡萝卜j喂给小兔子i,小兔子才会满足。

请你帮助小民设计一个程序,计算出最多能满足多少只小兔子。

注:gi、wi为正整数,每只兔子只能喂1根胡萝卜。

【输入】

输入数据为3行。

第1行,为整数N(1<=N<=20)和M(1<=M<=100),以“空格”为分隔符;分别表示有N只兔子和有M根胡萝卜。

第2行,为N个整数gi,以“空格”为分隔符;分别表示每只兔子希望最少能得到重量为gi的胡萝卜。

第3行,为M个整数wi,以“空格”为分隔符;分别小时每根胡萝卜的重量。

【输出】

输出为1行。1个整数X,表示最多能满足X只兔子。

#include 
#include 
#include 
#include 
/* 分孩子饼干或分兔子胡萝卜*/
using namespace std;
// g表示胃口   s表示饼干尺寸  
// 需要 g[i]<=s[j]且是s中的最大值
// 时间复杂度O(n) 
int findContentChildren(std::vector& g, std::vector& s) {
	// 对两个列表进行排序
	std::sort(g.begin(),g.end()); // sort 默认升序
	std::sort(s.begin(),s.end());
	unsigned int child = 0; //有多少孩子被满足
	unsigned int cookie = 0; //有多少饼干被孩子满足 
	
	while(child < g.size() && cookie < s.size()){
		if(g[child] <= s[cookie]){
			child ++;
		}
		cookie ++;
	}
	return child;
} 


// 测试结果 
int main(){
	std::vector g;  //孩子,即兔子的胃口满足重量值
	std::vector s;  //饼干,即胡萝卜的重量
	int N,M,i=0,gi;   //N个兔子,M根胡萝卜
	cin >> N >>  M;
//	cout << "N =" << N << ",M=" << M << endl;
	for(i=0;i> gi;
		g.push_back(gi);
	}
	for(i=0;i> gi;
		s.push_back(gi);
	}

	int ans = findContentChildren(g,s);
	printf("%d\n",ans);
	return 0;
}



 

你可能感兴趣的:(算法设计与分析,算法,c++)