Compare commits

..

No commits in common. "52b2321a9664873ba638f9f4f4932385381ae73e" and "84eee83148c1abd65dfff0e67636e6dfd7801343" have entirely different histories.

5 changed files with 46 additions and 184 deletions

32
src/8/27/P1880.cpp Normal file
View File

@ -0,0 +1,32 @@
/*
*/
#include <cstdint>
#include <iostream>
#include <stdexcept>
#include <vector>
using ll = int64_t;
int main(){
ll n;
std::cin>>n;
std::vector<ll> arr(n*2+1);
std::vector<ll> pre(n*2+1);
for(ll i=1;i<=n;i++){
std::cin>>arr[i];
arr[n+i]=arr[i];
}
for(ll i=1;i<=2*n;i++){
pre[i]=pre[i-1]+arr[i];
}
std::vector<std::vector<ll>> dp;
for(ll i=1;i<n;i++){
ll j=i+n-1;
dp.clear();
dp.resize(2*n+1,std::vector<ll>(2*n+1,1e9));
// for(ll x=1;)
throw std::runtime_error("NotImpletmented");
}
}

3
src/8/28/P4267.cpp Normal file
View File

@ -0,0 +1,3 @@
int main(){
}

View File

@ -24,7 +24,6 @@ dpmin[i][j] = 1e9
dp[i][i]=arr[i] dp[i][i]=arr[i]
*/ */
#include <algorithm>
#include <cstdint> #include <cstdint>
#include <iostream> #include <iostream>
#include <istream> #include <istream>
@ -52,61 +51,17 @@ int main(){
op[i+n]=op[i]; op[i+n]=op[i];
} }
std::vector<std::vector<ll>> dpmax,dpmin; std::vector<std::vector<ll>> dpmax,dpmin;
for(ll s=1;s<n;s++){
ll e = s+n-1;
dpmax.clear(); dpmax.clear();
dpmax.resize(n21,std::vector<ll>(n21,-1e9)); dpmax.resize(n21,std::vector<ll>(n21,-1e9));
dpmin.clear(); dpmin.clear();
dpmin.resize(n21,std::vector<ll>(n21,1e9)); dpmin.resize(n21,std::vector<ll>(n21,1e9));
for(ll i=1;i<=2*n;i++){ for(ll i=s;i<=e;i++){
dpmax[i][i]=op[i][1]; dpmax[i][i]=op[i][1];
dpmin[i][i]=op[i][1];
} }
for(ll len=2;len<=n;len++){ for(ll i=s;i<=e;i++){
for(ll i=1;i<=2*n-len;i++){
ll j=i+len-1;
for(ll k=i;k<j;k++){
if(op[k+1][0]==add){ //注意是k+1
dpmax[i][j]=std::max(
dpmax[i][k]+dpmax[k+1][j],
dpmax[i][j]
);
dpmin[i][j]=std::min(
dpmin[i][k]+dpmin[k+1][j],
dpmin[i][j]
);
}else{
dpmax[i][j]=std::max({
dpmax[i][j],
dpmax[i][k]*dpmax[k+1][j],
dpmin[i][k]*dpmin[k+1][j],
dpmax[i][k]*dpmin[k+1][j],
dpmin[i][k]*dpmax[k+1][j]
});
dpmin[i][j]=std::min({
dpmin[i][j],
dpmax[i][k]*dpmax[k+1][j],
dpmin[i][k]*dpmin[k+1][j],
dpmax[i][k]*dpmin[k+1][j],
dpmin[i][k]*dpmax[k+1][j]
});
} }
} }
} }
}
ll ans=-1e9;
std::vector<ll> edgs;
for(ll i=1;i<=n;i++){
ll nans=dpmax[i][i+n-1];
if(nans>ans){
ans=nans;
edgs.clear();
edgs.push_back(i);
}else if(nans==ans){
edgs.push_back(i);
}
}
std::cout<<ans<<"\n";
for(ll i:edgs){
std::cout<<i<<" ";
}
std::cout<<"\n";
}

View File

@ -1,54 +0,0 @@
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <istream>
#include <vector>
using ll = int64_t;
const ll inf=1e9;
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
ll n;
std::cin>>n;
std::vector<std::vector<ll>> dpmax(2*n+1,std::vector<ll>(2*n+1,-inf)),
dpmin(2*n+1,std::vector<ll>(2*n+1,inf)),
cost(2*n+1,std::vector<ll>(2*n+1));
for(ll i=1;i<=n;i++){
std::cin>>cost[i][i];
cost[n+i][n+i]=cost[i][i];
dpmin[i][i]=dpmax[i][i]=0;
dpmin[n+i][n+i]=dpmax[n+i][n+i]=0;
}
for(ll len=2;len<=n;++len){
for(ll i=1;i<=2*n-len;i++){
ll j=i+len-1;
for(ll k=i;k<j;k++){
cost[i][j]=cost[i][k]+cost[k+1][j];
}
}
}
for(ll len=2;len<=n;len++){
for(ll i=1;i<=2*n-len;i++){
ll j=i+len-1;
for(ll k=i;k<j;k++){
dpmax[i][j]=std::max(dpmax[i][j],dpmax[i][k]+dpmax[k+1][j]+cost[i][j]);
dpmin[i][j]=std::min(dpmin[i][j],dpmin[i][k]+dpmin[k+1][j]+cost[i][j]);
}
}
}
ll minans=inf,maxans=-inf;
for(ll i=1;i<=n;i++){
minans=std::min(minans,dpmin[i][i+n-1]);
maxans=std::max(maxans,dpmax[i][i+n-1]);
}
std::cout<<minans<<"\n"<<maxans<<"\n";
}

View File

@ -1,74 +0,0 @@
/*
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 <algorithm>
#include <cstdint>
#include <iostream>
#include <istream>
#include <vector>
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<<j<<", ";\
}\
std::cout<<"\n";\
}\
}while(0)
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n;
std::cin>>n;
std::vector<std::vector<ll>> dp(n+1,std::vector<ll>(n+1, inf)),
cnt(n+1,std::vector<ll>(n+1));
std::vector<ll> 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<i;k++){
dp[i][j]=std::min(
dp[i][j],
dp[k][j-1]+cnt[k+1][i]
);
}
}
}
for(ll j=1;j<=n;j++){
std::cout<<dp[n][j]<<"\n";
}
}