yuwj  

中暑4天回来的“真”复建场
已经不敢熬夜了,所以这场是早上 vp 的

A

思路:

存在两个相同数字就行

void solve(){
    bool ok = 0;
    set<int> st;
    cin>>n;
    For(i,0,n-1){
        cin>>x;
        if(st.count(x)) ok = 1;
        st.insert(x);
    }
    puts(ok?"YES":"NO");
}

B

思路:

就是每两个选大的那个,奇偶起点不同

void solve(){
    cin>>n;
    vector<int> num(n);
    for(auto &x:num)cin>>x;
    sort(all(num));
    ll ans = 0;
    for(int i=((n&1)^1); i<n; i+=2) ans += num[i];
    
    cout<<ans<<'\n';
}

C

交互题,不会,过

D

思路:

WK!就是我想的那样,就两种方法,刀掉下面那个,要么直接摔死,要么从前面一个底端伤害为 $1$ 然后刀掉

就是这样的

定义:$dp[i]:$ 前 $i$ 个位置死亡的最小攻击次数

转移:$dp[i] = min(dp[i-2] + num[i] - (i-1), dp[i-1] +num[i-1] + num[i]-1)$

事后:但凡我愿意沿着那个猜测大胆写一下,都不至于需要看题解来给自己增加信心,才写出来,靠

void solve(){
    cin>>n;
    vector<int> num(n+1), dp(n+1,0);
    For(i,1,n)cin>>num[i];
    dp[0]=0,dp[1] = num[1];
    For(i,2,n) dp[i] = min(dp[i-1] + num[i]-1, dp[i-2] +num[i-1]+ max(0ll,num[i] - (i-1)));
    cout<<dp[n]<<'\n';
}
posted on 2025-08-25 13:08  xiaowang524  阅读(14)  评论(0)    收藏  举报