1012 拼数
首先我们得知道,这道题并不是一道贪心,而是排序模拟
一看数据范围,才20,直接把每种可能的拼法枚举一下然后比较就好了嘛?先试试
当然AC了
这道题其实就是枚举,因为数据很小,才20个数,时间范围就n^2,并不需要太大的算法,只需要枚举每一个数a[i]然后再枚举a[i]后面的数a[j],将这两个正着拼一块和反着拼一块看看哪个大,将大的往前放,也就是swap交换,这样最后输出的就是最大的
一开始想用一个max,结果发现,max不允许,直接这样一位一位的求最大值,最后求出来的就是最大值
有点像动态规划
还有这道题我们使用字符串数组 这样 直接相加很方便实行拼数
----------重新------------
我感觉如果按照贪心来排序也不是不行
打电话的方式来枚举,非常好,每个数i然后从i往后进行拼接,然后两两拼接最大的,进行交换,说白了就是暴力
j和i拼更大,j放前面,所以这样一轮轮的,最后的次序就是最大拼接
暴力枚举
#include<bits/stdc++.h>
using namespace std;
int n;
string a[100];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(a[i]+a[j]<a[j]+a[i])//j和i拼更大,j放前面,所以这样一轮轮的,最后的次序就是最大拼接
swap(a[i],a[j]);
//大的往前放
}
}
for(int i=1;i<=n;i++)
cout<<a[i];
return 0;
}