mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-04 01:01:43 +00:00
update
This commit is contained in:
parent
4f984539f1
commit
f39b892175
@ -1,4 +1,9 @@
|
||||
## 线性动态规划优化为O(nlogn)方法
|
||||
## 线性动态规划优化为$O(n\log{n})$方法
|
||||
>如果是递增序列就lower_bound
|
||||
|
||||
>如果是递减序列就手写二分
|
||||
>如果是递减序列就手写二分
|
||||
|
||||
## 区间dp
|
||||
1. 根据问题推出dp含义
|
||||
2. 根据规则写出dp的状态转移公式
|
||||
3. 处理边界问题
|
54
src/8/26/P5424.cpp
Normal file
54
src/8/26/P5424.cpp
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
|
||||
dp[i][j]
|
||||
前i组蛇,用j个网的最小浪费空间
|
||||
|
||||
dp[i][j]=min(dp[i][j],dp[k][j-1]+cnt[k+1][i])
|
||||
|
||||
dp[i][j]=1e9
|
||||
dp[0][0]=0
|
||||
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <vector>
|
||||
|
||||
using ll = int64_t;
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
|
||||
ll n,k;
|
||||
std::cin>>n>>k;
|
||||
std::vector<ll> v(n+1);
|
||||
std::vector<std::vector<ll>> cnt(n+1,std::vector<ll>(n+1));//cnt[i][j]=i-j用一个网浪费的空间
|
||||
std::vector<std::vector<ll>> dp(n+1,std::vector<ll>(k+1, 1e9));
|
||||
dp[0][0]=0;
|
||||
|
||||
for(ll i=1;i<=n;i++){
|
||||
std::cin>>v[i];
|
||||
}
|
||||
for(ll i=1;i<=n;i++){
|
||||
for(ll j=i;j<=n;j++){
|
||||
ll nmax = *std::max_element(v.begin()+i,v.begin()+j+1);
|
||||
ll ncnt=0;
|
||||
for(ll k=i;k<=j;k++){
|
||||
ncnt+=nmax-v[k];
|
||||
}
|
||||
cnt[i][j]=ncnt;
|
||||
}
|
||||
}
|
||||
for(ll i=1;i<=n;i++){
|
||||
dp[i][1]=cnt[1][i];
|
||||
for(ll j=2;i<=k;j++){
|
||||
for(ll k=1;k<i;k++){
|
||||
dp[i][j]=std::min(dp[i][j],dp[k][j-1]+cnt[k+1][i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout<<dp[n][k]<<"\n";
|
||||
}
|
Loading…
Reference in New Issue
Block a user