Compare commits

...

2 Commits

Author SHA1 Message Date
8b49a88aa9 update 2025-08-27 20:29:44 +08:00
f8994b5c7c update 2025-08-27 16:51:18 +08:00
5 changed files with 175 additions and 41 deletions

View File

@ -3,4 +3,8 @@
dp[i][j]=i个到第j个涂成指定颜色需要的次数
*/
*/
int main(){
}

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");
}
}

48
src/8/27/opj1808.cpp Normal file
View File

@ -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 <algorithm>
#include <iostream>
#include <istream>
#include <string>
#include <vector>
using ll = int64_t;
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
std::string a,b;
std::vector<std::vector<ll>> 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<ll>(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<<dp[n][m]<<"\n";
}
}

81
src/8/27/opj2000.cpp Normal file
View File

@ -0,0 +1,81 @@
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <istream>
#include <ostream>
#include <tuple>
#include <vector>
/*
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<k>(dp[i][j]))
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n,m;
std::cin>>n;
std::vector<ll> a(n+1);
for(ll i=1;i<=n;i++)std::cin>>a[i];
std::cin>>m;
std::vector<ll> b(m+1);
for(ll j=1;j<=m;j++)std::cin>>b[j];
std::vector<std::vector<std::tuple<ll,ll,ll>>>dp(n+1,std::vector<std::tuple<ll,ll,ll>>(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<j;k++){
if(b[k]<a[i]){
maxprev=std::max(maxprev,gdp(i-1,k,0));
gdp(i,j,1)=i-1;
gdp(i,j,2)=k;
}
}
gdp(i,j,0)=maxprev+1;
}
}
}
ll ans=0,maxi=0,maxj=0;
for(ll i=1;i<=n;i++){
for(ll j=1;j<=m;j++){
// printf("dp[%lld][%lld]=%lld\n",i,j,dp[i][j]);
if(ans<gdp(i,j,0)){
ans=gdp(i,j,0);
maxi=i;
maxj=j;
}
}
}
std::vector<ll> 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<<ans<<"\n";
std::reverse(ans2.begin(),ans2.end());
for(auto i:ans2){
std::cout<<i<<" ";
}
std::cout<<std::endl;
_Exit(0);
}

View File

@ -1,41 +1,10 @@
#include <iostream>
using namespace std;
const int N = 1000;
int c[N];
int logic(int x, int y) {
return (x & y) ^ ((x ^ y) | (~x & y));
}
void generate(int a, int b, int *c) {
for (int i = 0; i < b; i++)
c[i] = logic(a, i) % (b + 1);
}
void recursion(int depth, int *arr, int size) {
if (depth <= 0 || size <= 1) return;
int pivot = arr[0];
int i = 0, j = size - 1;
while (i <= j) {
while (arr[i] < pivot) i++;
while (arr[j] > pivot) j--;
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++; j--;
}
}
recursion(depth - 1, arr, j + 1);
recursion(depth - 1, arr + i, size - i);
}
int main() {
int a, b, d;
cin >> a >> b >> d;
generate(a, b, c);
recursion(d, c, b);
for (int i = 0; i < b; ++i) cout << c[i] << " ";
cout << endl;
#include <cstdio>
int main(){
int a=0;
char* c = (char*)&a;
c[0]=0x1f;
c[1]=0x1f;
c[2]=0x1f;
c[3]=0x1f;
printf("%d\n",a);
}