# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
596393 | 2022-07-14T16:54:45 Z | Deepesson | Peru (RMI20_peru) | C++17 | 0 ms | 0 KB |
#include <bits/stdc++.h> #define MAX 2005 using ll = long long; ll inf = 1LL<<60LL; ll dp[MAX]; int N,K; ll array[MAX]; ll MOD = 1e9+7; ll expo[MAX]; ll gera_hash(void){ ll hash = 0; for(int i=0;i!=N;++i){ hash = (hash + (dp[i]*expo[N-1-i]))%MOD; } return hash; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0); std::cin>>N>>K; for(int i=0;i!=N;++i)std::cin>>array[i]; expo[0]=1; for(int i=1;i!=MAX;++i)expo[i]=(23LL*expo[i-1])%MOD; for(auto&x:dp)x=inf; { ll max=0; for(int i=0;i!=K;++i){ max=std::max(max,array[i]); dp[i]=max; } } for(int i=0;i!=N;++i){ ll custo=0; for(int j=i;j!=std::max(-1,i-K-1);--j){ custo=std::max(custo,array[j]); dp[i]=std::min(dp[i],custo+dp[j]); } } for(int i=0;i!=N;++i){ // std::cout<<dp[i]<<" \n"[i==N-1]; } std::cout<<gera_hash()<<"\n"; }