目录
031:游游的水果大礼包
032:买卖股票的最好时机(二)
033:倒置字符串
031:游游的水果大礼包
游游的水果大礼包 (nowcoder.com)
题目:
题解:
枚举:依次枚举1号礼包的数量,根据剩下的苹果桃子数量,计算出2号礼包的数量,计算每种组合的价值,记录下最大价值。
#include<iostream>
#include<algorithm>
using namespace std;
long long n,m,a,b;
int main()
{
cin>>n>>m>>a>>b;
long long ret=0;
for(long long x=0;x<=min(n/2,m);x++)
{
long long y=min(n-2*x,(m-x)/2);
ret=max(ret,a*x+b*y);
}
cout<<ret<<endl;
return 0;
}
032:买卖股票的最好时机(二)
买卖股票的最好时机(二)_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
动态规划:
1.状态表示:dp[0][i]表示:i位置为卖出状态。dp[1][i]表示:i位置为买入状态。
2.状态转移方程(根据当前状态划分情况):如图
#include <iostream>
#include<vector>
using namespace std;
int main()
{
int n=0;
cin>>n;
int prices[n];
for(int i=0;i<n;i++)
{
cin>>prices[i];
}
vector<vector<int>> dp(2,vector<int>(n));
dp[0][0]=0;
dp[1][0]=-prices[0];
for(int i=1;i<n;i++)
{
dp[0][i]=max(dp[0][i-1],dp[1][i-1]+prices[i]);
dp[1][i]=max(dp[0][i-1]-prices[i],dp[1][i-1]);
}
int ret=0;
for(int i=0;i<n;i++)
{
ret=max(ret,dp[0][i]);
}
cout<<ret<<endl;
return 0;
}
033:倒置字符串
倒置字符串_牛客题霸_牛客网 (nowcoder.com)
题目:
题解:
找规律:先整体逆置,再划分单词,单独逆置。(注意:从单词首字母开始,到第一个空格的区间进行逆置,逆置内容不会包括空格的)
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
string s;
int main()
{
getline(cin,s);
reverse(s.begin(),s.end());
int left=0;
int n=s.size();
while(left<n)
{
int right=left;
while(right<n && s[right]!=' ')
{
right++;
}
reverse(s.begin()+left,s.begin()+right);
while(right<n && s[right]==' ')
{
right++;
}
left=right;
}
cout<<s<<endl;
return 0;
}