谁能帮我解释一下这个代码喵?
  • 板块灌水区
  • 楼主lucy2012
  • 当前回复9
  • 已保存回复9
  • 发布时间2024/8/10 17:34
  • 上次更新2024/8/10 19:02:42
查看原帖
谁能帮我解释一下这个代码喵?
1252442
lucy2012楼主2024/8/10 17:34

七夕单身双身快乐喵~

好像解决的是石子合并,可是怎么用贪心?

#include<bits/stdc++.h>
using namespace std;
const int N = 50005;
int n, stone[N], ans, t = 1;

void solve(int k){
    int tmp = stone[k] + stone[k - 1];
    ans += tmp;
    for(int i = k; i < t - 1; i++)
        stone[i] = stone[i + 1];
    t--; int j = 0;
    for(j = k - 1; j > 0 && stone[j - 1] < tmp; j--)
        stone[j] = stone[j - 1];
    stone[j] = tmp;
    while(j >= 2 && stone[j] >= stone[j - 2]){
        int d = t - j; solve(j - 1);
        j = t - d;
    }
}

int main(){
    int n; cin >> n;
    for(int i = 0; i < n; i++)
        cin >> stone[i];
    for(int i = 1; i < n; i++){
        stone[t++] = stone[i];
        while(t >= 3 && stone[t - 3] <= stone[t - 1])
            solve(t - 2);
    }
    while(t > 1) solve(t - 1);
    cout << ans << endl;
    return 0;
}
2024/8/10 17:34
加载中...