mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-08-22 03:01:43 +00:00
update
This commit is contained in:
parent
df6c28199c
commit
5f7301d876
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/build
|
/build
|
||||||
/.cache
|
/.cache
|
||||||
|
/test.*
|
@ -3,26 +3,24 @@
|
|||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <istream>
|
#include <istream>
|
||||||
|
#include <limits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
using ll = int64_t;
|
using ll = int64_t;
|
||||||
|
|
||||||
ll n,a,b;
|
ll n,a,b,ans=std::numeric_limits<ll>::max();
|
||||||
std::vector<std::vector<ll>> dp;
|
std::vector<std::vector<ll>> dp;
|
||||||
|
constexpr ll idxa = 6000+7;
|
||||||
|
|
||||||
template<class ...Ts>
|
template<class ...Ts>
|
||||||
void log(Ts&&...ts){
|
static inline __attribute__((always_inline)) void log(Ts&&...ts){
|
||||||
std::cout<<"Log: ";
|
std::cout<<"Log: ";
|
||||||
((std::cout<<ts<<' '),...);
|
((std::cout<<ts<<' '),...);
|
||||||
std::cout<<'\n';
|
std::cout<<'\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
void pdp(){
|
static inline __attribute__((always_inline)) ll& getdp(ll i,ll j){
|
||||||
std::cout<<"{";
|
return dp[i%2][j+idxa];
|
||||||
for(ll i=0;i<dp.size();i++){
|
|
||||||
std::cout<<"{"<<dp[i][0]<<","<<dp[i][1]<<"}, ";
|
|
||||||
}
|
|
||||||
std::cout<<"}\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
@ -31,23 +29,30 @@ int main(){
|
|||||||
std::cout.tie(nullptr);
|
std::cout.tie(nullptr);
|
||||||
|
|
||||||
std::cin>>n;
|
std::cin>>n;
|
||||||
dp.resize(n+1,std::vector<ll>(2));
|
dp.resize(2,std::vector<ll>(2*idxa+1,std::numeric_limits<ll>::max()-7));
|
||||||
|
getdp(0, 0)=0;
|
||||||
for(ll i=1;i<=n;i++){
|
for(ll i=1;i<=n;i++){
|
||||||
/*
|
/*
|
||||||
dp[k][0] dp[k][1]
|
i=前i个 <=1000
|
||||||
|
j=当前的差值 -6000<=j<=6000
|
||||||
|
k为最小翻转次数 <=1000
|
||||||
|
dp[i][j]=k
|
||||||
|
O(1000*12000)=1e7
|
||||||
*/
|
*/
|
||||||
std::cin>>a>>b;
|
std::cin>>a>>b;
|
||||||
if(abs(dp[i-1][0]+a-b)<abs(dp[i-1][1]+a-b)){
|
for(ll j=6000;j>=-6000;j--){
|
||||||
dp[i][0]=dp[i-1][0]+a-b;
|
getdp(i, j)=std::min(getdp(i, j),getdp(i-1, j-(a-b)));
|
||||||
}else{
|
getdp(i, j)=std::min(getdp(i, j),getdp(i-1, j-(-a+b))+1);
|
||||||
dp[i][0]=dp[i-1][1]+a-b;
|
|
||||||
}
|
}
|
||||||
if(abs(dp[i-1][0]+b-a)<abs(dp[i-1][1]+b-a)){
|
dp[i%2==1?0:1].assign(2*idxa+1,std::numeric_limits<ll>::max()-7);
|
||||||
dp[i][1]=dp[i-1][0]+b-a;
|
}
|
||||||
}else{
|
for(ll i=0;i<=6000;i++){
|
||||||
dp[i][1]=dp[i-1][1]+b-a;
|
if(getdp(n, i)<=1000){
|
||||||
|
std::cout<<getdp(n, i)<<'\n';
|
||||||
|
break;
|
||||||
|
}else if(getdp(n, -i)<=1000){
|
||||||
|
std::cout<<getdp(n, -i)<<'\n';
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pdp();
|
|
||||||
std::cout<<std::min(abs(dp[n][0]),abs(dp[n][1]))<<'\n';
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user