是数据水吗,如果不是如何证明这样写的正确性:
#include <bits/stdc++.h>
#define JS ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
int dp[100001], a[100001], n;
int main() {
JS;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + 1 + n);
dp[1] = a[1], dp[2] = a[2];
for (int i = 3; i <= n; i++) {
dp[i] = min(dp[i - 1] + a[i] + a[1], dp[i - 2] + a[i] + a[2] * 2 + a[1]);
}
cout << dp[n];
return 0;
}
如果将这份代码中的 sort(a + 1, a + 1 + n); 写成 sort(a + 1, a + n); 也能过,按理说 a[] 并不是完全有序,递推的时候会有问题,但凡最后一个是最小值就全挂了