题意: 给定一个长度为n的数组a,和一个全零数组b,bi有两种操作:加ai或减ai,问你最少执行多少次操作使b成为严格单调上升数组
思路: 暴力枚举每一只位置i(即bi不做操作,贪心思想),然后计算满足单调上升数组的最小操作次数,具体见代码
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
typedef long long LL;
int a[N];
int T;
int main ()
{
int n;
cin >> n;
LL ans = 1e18;
for (int i = 1; i <= n; i ++) cin >> a[i];
for (int i = 1; i <= n; i ++)
{
LL pre = 0;
LL sum = 0;
int last = 0;
for (int j = i + 1; j <= n; j ++)
{
sum += pre / a[j] + 1;
pre = (pre / a[j] + 1) * a[j];
}
pre = 0;
for (int j = i - 1; j >= 1; j --)
{
sum += pre / a[j] + 1;
pre = (pre / a[j] + 1) * a[j];
}
ans = min (ans, sum);
}
cout << ans;
return 0;
}