牛客多校第二场D

题目

贪心

先拿上第一个,然后继续向后找

如果后一个商店的价值大于等于前一个商店,就继续向后

否则,遇到了后一个商店的价值小于前一个的时候,此时将手里的物品卖出给前一个商店

然后再从后一个商店里拿东西,继续找  依次类推

如果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;
}

猜你喜欢

转载自blog.csdn.net/Soul_97/article/details/81149403