动规求解:每次两个数结合时,都选择较大的方式结合。
动规五步:
//dp 数组 及 含义
dp[i]表示 数组有 i+1 个元素时,得到的最大结果
//递推公式
dp[i]=max(stoi(to_string(nums[i])+to_string(dp[i-1])),stoi(to_string(dp[i-1])+to_string(nums[i])));
//初始化
dp[0]=nums[0];
//遍历顺序:从前往后
//打印dp数组【验证用】
代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int n;
string s;
void dp(vector<int>nums)
{
//dp[i]表示加入第i个元素后最大的数
//递推公式:
//dp[i]=max(stoi(to_string(nums[i])+to_string(dp[i-1])),stoi(to_string(dp[i-1])+to_string(nums[i])));
//初始化:dp[0]=nums[0];
//顺序:从前往后
vector<int>dp(nums.size(), 0);
dp[0] = nums[0];
for (int i = 1; i < nums.size(); i++)
{
dp[i] = max(stoi(to_string(nums[i]) + to_string(dp[i - 1])), stoi(to_string(dp[i - 1]) + to_string(nums[i])));
}
s=to_string(dp[nums.size() - 1]);
}
int main()
{
while (cin >> n)
{
vector<int>nums(n,0);
for (int i = 0; i < n; i++)
cin >> nums[i];
dp(nums);
cout << s;
}
return 0;
}