2024 年中国大学生程序设计竞赛全国邀请赛(郑州)暨第六届 CCPC 河南省大学生程序设计竞赛(Problem L. Toxel 与 PCPC II)


对于这道题我最开始是想用斜率优化dp,但是x是四次方明显不行,如果是二次方就好了,所以要换一个思路,
可以观察到如果一次性修复的x太多了,会导致时间消耗太大,这样我们还不如一个错误一个错误的修,当x=22时x的四次方就超过了200000,所以说我们最多一次修复22个bug了,值得一提的是,我原本想用dpi储存修复前i个字符的最短时间,但正确的是应该是修复前i个错误所消耗的最小的时间,比如最后面是一连串没有bug,我们应该直接不管,

#include<iostream>
#include<cstring>
using namespace std;
#define int long long
const int N=2*1e5+5;
int n,m; 
int a[N];
int dp[N];
int quick(int s,int k){
    int res=1;
    while(k){
        if(k&1)res*=s;
        s*=s;
        k>>=1;
    }
    return res;
}
signed main(){
    cin>>n>>m;
    memset(dp,0x3f,sizeof(dp));
    dp[0]=0;
    for(int i=1;i<=m;i++)cin>>a[i];
    for(int i=1;i<=m;i++){
        for(int j=i-1;j>=max(0ll,i-22);j--){
            dp[i]=min(dp[i],dp[j]+a[i]+quick(i-j,4));//a[i]表示字符个数
        }
    }
    cout<<dp[m];
    return 0;
}
posted @ 2025-03-06 21:37  郭轩均  阅读(94)  评论(0)    收藏  举报