This commit is contained in:
Zengtudor 2025-08-26 16:11:12 +08:00
parent f39b892175
commit 8f3a0f8984

View File

@ -3,7 +3,7 @@
dp[i][j] dp[i][j]
i组蛇j个网的最小浪费空间 i组蛇j个网的最小浪费空间
dp[i][j]=min(dp[i][j],dp[k][j-1]+cnt[k+1][i]) dp[i][j]=min(dp[i][j],dp[m][j-1]+cnt[m+1][i])
dp[i][j]=1e9 dp[i][j]=1e9
dp[0][0]=0 dp[0][0]=0
@ -12,21 +12,31 @@ dp[0][0]=0
#include <algorithm> #include <algorithm>
#include <cstdint> #include <cstdint>
#include <cstdio>
#include <iostream> #include <iostream>
#include <istream> #include <istream>
#include <vector> #include <vector>
using ll = int64_t; using ll = int64_t;
#define p2v(dp)do{\
for(ll i=0;i<dp.size();i++){\
for(ll j=0;j<dp[i].size();j++){\
printf("[%lld][%lld]=%lld\n",i,j,dp[i][j]);\
}\
}\
}while(0)
int main(){ int main(){
std::iostream::sync_with_stdio(false); std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr); std::cin.tie(nullptr);
ll n,k; ll n,m;
std::cin>>n>>k; std::cin>>n>>m;
m++;
std::vector<ll> v(n+1); 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>> 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)); std::vector<std::vector<ll>> dp(n+1,std::vector<ll>(m+1, 1e9));
dp[0][0]=0; dp[0][0]=0;
for(ll i=1;i<=n;i++){ for(ll i=1;i<=n;i++){
@ -36,19 +46,23 @@ int main(){
for(ll j=i;j<=n;j++){ for(ll j=i;j<=n;j++){
ll nmax = *std::max_element(v.begin()+i,v.begin()+j+1); ll nmax = *std::max_element(v.begin()+i,v.begin()+j+1);
ll ncnt=0; ll ncnt=0;
for(ll k=i;k<=j;k++){ for(ll m=i;m<=j;m++){
ncnt+=nmax-v[k]; ncnt+=nmax-v[m];
} }
cnt[i][j]=ncnt; cnt[i][j]=ncnt;
} }
} }
// printf("cnt\n");
// p2v(cnt);
for(ll i=1;i<=n;i++){ for(ll i=1;i<=n;i++){
dp[i][1]=cnt[1][i]; dp[i][1]=cnt[1][i];
for(ll j=2;i<=k;j++){ for(ll j=2;j<=m&&j<=i;j++){
for(ll k=1;k<i;k++){ for(ll k=j-1;k<i;k++){
dp[i][j]=std::min(dp[i][j],dp[k][j-1]+cnt[k+1][i]); dp[i][j]=std::min(dp[i][j],dp[k][j-1]+cnt[k+1][i]);
} }
} }
} }
std::cout<<dp[n][k]<<"\n"; // printf("dp\n");
// p2v(dp);
std::cout<<dp[n][m]<<"\n";
} }