贪心
先拿上第一个,然后继续向后找
如果后一个商店的价值大于等于前一个商店,就继续向后
否则,遇到了后一个商店的价值小于前一个的时候,此时将手里的物品卖出给前一个商店
然后再从后一个商店里拿东西,继续找 依次类推
如果a[i]=a[i+1],则可以删掉第i+1个商店。因为任何在第i+1个商店进行的交易都可以转为在第i个商店 进行,且收益不变。之后,如果a[i]<a[i+1],则离开第i个商店时一定要带上一件商品。如果a[i]>a[i+1],则离开 第i个商店时一定要空着手。
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long ll;
const int maxn = 100005;
const int mod = 1000000007;
ll a[maxn];
int n;
int main()
{
int t;
cin >> t;
while(t --)
{
memset(a,0,sizeof(a));
cin >> n;
for(int i = 1;i <= n;i ++)
cin >> a[i];
ll money = 0, c = 0, pre = a[1];
for(int i = 1;i <= n + 1;i ++)
{
if(a[i] >= a[i - 1]) continue;
else
{
if(a[i - 1] > pre)
{
money += a[i - 1] - pre;
c ++;
}
pre = a[i];
}
}
cout << money << " " << c * 2 << endl;
}
return 0;
}