对于这道题我最开始是想用斜率优化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;
}