| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1290342 | HoriaHaivas | Peru (RMI20_peru) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
#include "peru.h"
#define debug(x) cerr << #x << " " << x << "\n"
#define debugs(x) cerr << #x << " " << x << " "
#pragma GCC optimize("Ofast")
#define int long long
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int range_rng(int l, int r)
{
return uniform_int_distribution<int>(l,r)(rng);
}
int dp[2005];
int v[2005];
const int mod=1e9+7;
int lgpow(int x, int p)
{
int ans,pw,i;
ans=1;
pw=x;
for (i=0;i<30;i++)
{
if (p&(1<<i))
ans=(ans*pw)%mod;
pw=(pw*pw)%mod;
}
return ans;
}
int cost (int l, int r)
{
int i,mx;
mx=0;
for (i=l;i<=r;i++)
{
mx=max(mx,v[i]);
}
return mx;
}
signed solve(signed N, signed K, signed* S)
{
int n,k,i,j,ans;
n=N;
k=K;
ans=0;
for (i=1;i<=n;i++)
{
v[i]=S[i-1];
}
for (i=1;i<=n;i++)
{
dp[i]=1e18;
for (j=i;j>=max(i-k+1,1LL);j--)
{
dp[i]=min(dp[i],dp[j-1]+cost(j,i));
}
ans+=((dp[i]%mod)*lgpow(23,n-i))%mod;
ans%=mod;
}
return ans;
}
signed main()
{
/*
ifstream fin("arbore.in");
ofstream fout("arbore.out");
*/
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,k,i,j,ans;
cin >> n >> k;
for (i=1;i<=n;i++)
{
cin >> v[i];
}
cout << solve(n,k,v);
return 0;
}
