From f8994b5c7ca21d6f3332968e08a33efab0266957 Mon Sep 17 00:00:00 2001 From: Zengtudor Date: Wed, 27 Aug 2025 16:51:18 +0800 Subject: [PATCH] update --- src/8/26/P7414.cpp | 6 +++- src/8/27/P1880.cpp | 32 +++++++++++++++++ src/8/27/opj1808.cpp | 48 ++++++++++++++++++++++++++ src/8/27/opj2000.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 src/8/27/P1880.cpp create mode 100644 src/8/27/opj1808.cpp create mode 100644 src/8/27/opj2000.cpp diff --git a/src/8/26/P7414.cpp b/src/8/26/P7414.cpp index 42774b8..2ff4711 100644 --- a/src/8/26/P7414.cpp +++ b/src/8/26/P7414.cpp @@ -3,4 +3,8 @@ dp[i][j]=从第i个到第j个涂成指定颜色需要的次数 -*/ \ No newline at end of file +*/ + +int main(){ + +} \ No newline at end of file diff --git a/src/8/27/P1880.cpp b/src/8/27/P1880.cpp new file mode 100644 index 0000000..25b0610 --- /dev/null +++ b/src/8/27/P1880.cpp @@ -0,0 +1,32 @@ +/* + + + +*/ +#include +#include +#include +#include +using ll = int64_t; + +int main(){ + ll n; + std::cin>>n; + std::vector arr(n*2+1); + std::vector 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> dp; + for(ll i=1;i(2*n+1,1e9)); + // for(ll x=1;) + throw std::runtime_error("NotImpletmented"); + } +} \ No newline at end of file diff --git a/src/8/27/opj1808.cpp b/src/8/27/opj1808.cpp new file mode 100644 index 0000000..064ab48 --- /dev/null +++ b/src/8/27/opj1808.cpp @@ -0,0 +1,48 @@ +/* + +dp[i][j]=字符串A到第i位与字符串B到第j位的最长公共子序列长度 +if a[i]==b[j]: + dp[i][j]=dp[i-1][j-1]+1 +else: + dp[i][j]=max( + dp[i-1][j], + dp[i][j-1] + ) + +*/ + + +#include +#include +#include +#include +#include + +using ll = int64_t; + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + std::string a,b; + std::vector> dp; + while (std::cin>>a>>b) { + ll n=a.size(),m=b.size(); + a=' '+a; + b=' '+b; + dp.clear(); + dp.resize(n+1,std::vector(m+1)); + for(ll i=1;i<=n;i++){ + for(ll j=1;j<=m;j++){ + if(a[i]==b[j]){ + dp[i][j]=dp[i-1][j-1]+1; + }else{ + dp[i][j]=std::max( + dp[i-1][j], + dp[i][j-1] + ); + } + } + } + std::cout< +#include +#include +#include +#include +#include +#include + +/* + +dp[i][j]=字符串A前i个与字符串B前j个 +5 +1 4 2 5 -12 +4 +-12 1 2 4 + +*/ + + +using ll = int64_t; + +#define gdp(i,j,k)(std::get(dp[i][j])) + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + ll n,m; + std::cin>>n; + std::vector a(n+1); + for(ll i=1;i<=n;i++)std::cin>>a[i]; + std::cin>>m; + std::vector b(m+1); + for(ll j=1;j<=m;j++)std::cin>>b[j]; + std::vector>>dp(n+1,std::vector>(m+1)); + for(ll i=1;i<=n;i++){ + for(ll j=1;j<=m;j++){ + if(a[i]!=b[j]){ + gdp(i, j, 0) = gdp(i-1,j,0); + gdp(i, j, 1)=i-1; + gdp(i, j, 2)=j; + }else{ + ll maxprev=0; + for(ll k=1;k ans2; + ans2.reserve(n); + // printf("maxi=%lld,maxj=%lld\n",maxi,maxj); + while(maxi>0){ + ans2.push_back(a[maxi]); + ll tmpi=maxi; + maxi=gdp(maxi,maxj,1); + maxj=gdp(tmpi,maxj,2); + } + std::cout<