2 条题解

  • 1
    @ 2025-11-2 18:29:01

    随便秒杀的小题

    #include <bits/stdc++.h>
    #define endl '\n'
    using namespace std;
    const int N=1e5+5,INF=0x3f3f3f3f,MOD=1e9+7;
    const int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
    typedef long long LL;
    string a,b;
    int lena,lenb;
    int main() {
    	ios::sync_with_stdio(false);
    	cin.tie(nullptr);cout.tie(nullptr);
    	cin>>lena>>a>>lenb>>b;
    	a = " "+a,b = " "+b;
    	vector<vector<int>>dp(lena+1,vector<int>(lenb+1));
    	for(int i=1;i<=lena;i++){
    		for(int j=1;j<=lenb;j++){
    			dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
    			if(a[i]==b[j])dp[i][j] = max(dp[i-1][j-1]+1,dp[i][j]);	
    		}
    	}
    	cout<<dp[lena][lenb]<<endl;
    	return 0;
    }
    
    
    • -1
      @ 2023-12-18 17:11:53

      这题还没有数据,但是代码还是可以写的,这道题其实就是很板的一道最长公共子序列,一道很经典的DP

      #include<bits/stdc++.h>
      using namespace std;
      const int N = 2e4;
      char a[N],b[N];
      int dp[N][N];
      int main() {
      	int n,m;
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      	}
      	cin>>m;
      	for(int i=1;i<=m;i++){
      		cin>>b[i];
      	}
      	for(int i=1; i<=n; i++)
      		for(int j=1; j<=m; j++) {
      			dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
      			if(a[i-1]==b[j-1])
      				dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
      		}
      	int t=dp[n][m];
      	cout<<t;
      }
      
      • @ 2023-12-18 17:23:41

        我相信没有题解你们是活不下去的(

    • 1

    信息

    ID
    1783
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    37
    已通过
    5
    上传者