diff --git a/src/8/28/P4267.cpp b/src/8/28/P4267.cpp deleted file mode 100644 index 294989d..0000000 --- a/src/8/28/P4267.cpp +++ /dev/null @@ -1,3 +0,0 @@ -int main(){ - -} \ No newline at end of file diff --git a/src/8/29/P4267.cpp b/src/8/29/P4267.cpp new file mode 100644 index 0000000..cb548ee --- /dev/null +++ b/src/8/29/P4267.cpp @@ -0,0 +1,74 @@ +/* + +dp[i][j]=前i个牛发生j次逃跑时序列不一致的数量最小数目 + +dp[i][j]=min(dp[k][j-1]+cnt[k+1][i]) + +dp[i][j]=inf + +dp[i][1]=cnt[1][i] + +*/ + +#include +#include +#include +#include +#include +using ll = int64_t; + +const ll inf=1e9; + +#define p2v(arr)do{\ + std::cout<<#arr<<":\n";\ + for(auto&i:(arr)){\ + for(auto&j:i){\ + std::cout<>n; + std::vector> dp(n+1,std::vector(n+1, inf)), + cnt(n+1,std::vector(n+1)); + std::vector arr(n+1); + for(ll i=1;i<=n;i++){ + std::cin>>arr[i]; + } + /* + cost[i][j] 表示在区间 [i, j] 内,假设第 i 天发生逃跑, + 并且在 (i, j] 区间内没有其他逃跑发生时,需要修改的记录数。 + */ + for(ll i=1;i<=n;i++){ + ll mis=0; + for(ll j=i;j<=n;j++){ + if(j-i!=arr[j]){ + mis++; + } + cnt[i][j]=mis; + } + } + // p2v(cnt); + for(ll i=1;i<=n;i++){ + dp[i][1]=cnt[1][i]; + } + for(ll i=1;i<=n;i++){ + for(ll j=2;j<=n;j++){ + for(ll k=j-1;k