你可以将已AC的题目连代码加链接发在讨论区,十分感谢!!!

本站为学术网站,非常注重学术诚信!

代码分享仅供学习参考使用(即题解),请勿抄袭题解!!!

代码来源为神秘的惠中傻鱼们。

已更新:二维动规全部习题

正在连载:树形dp

请注意:非题解评论可能被删除

26 条评论

  • @ 2026-6-2 20:56:29
    using namespace std;
    #define int long long
    const int N=1e6+10;
    int primes[N],cnt;
    bool st[N];
    bool is_p[N];
    void init(int n){
        memset(st,0,sizeof st);
        cnt=0;
        for(int i=2;i<=n;i++){
            if(!st[i]){
                primes[cnt++]=i;
            }
            for(int j=0;j<cnt&&i*primes[j]<=n;j++){
                st[i*primes[j]]=1;
                if(i%primes[j]==0){
                    break;
                }
            }
        }
    }
    signed main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        init(50000);
        int l,u;
        while(cin>>l>>u){
            memset(is_p,0,sizeof is_p);
            if(l==1) is_p[0]=1;
            for(int i=0;i<cnt;i++){
                int p=primes[i];
                int start=max(p*2,(l+p-1)/p*p);
                for(int j=start;j<=u;j+=p){
                    is_p[j-l]=1;
                }
            }
            int last=-1;
            int min_d=1e18,max_d=-1;
            int c1=-1,c2=-1,d1=-1,d2=-1;
            for(int i=0;i<=u-l;i++){
                if(!is_p[i]){
                    int p=i+l;
                    if(last!=-1){
                        int d=p-last;
                        if(d<min_d){
                            min_d=d;
                            c1=last;
                            c2=p;
                        }
                        if(d>max_d){
                            max_d=d;
                            d1=last;
                            d2=p;
                        }
                    }
                    last=p;
                }
            }
            if(max_d==-1){
                cout<<"There are no adjacent primes.\n";
            }else{
                cout<<c1<<","<<c2<<" are closest, "<<d1<<","<<d2<<" are most distant.\n";
            }
        }
        return 0;
    }
    
    
    
    • @ 2026-6-2 20:52:07

      根据数论基础:如果一个数 X ≤ U X≤U 是合数,那么它必定有一个质因数 P ≤ U P≤ U ​ 。 因为 2 31 − 1 ≈ 46340 2 31 −1 ​ ≈46340,所以我们只需要: 第一步(预处理):用线性筛求出 1 ∼ 50000 1∼50000 范围内的所有质数。 第二步(区间筛):对于每组输入的 L L 和 U U,遍历我们预处理出的质数 P P。算出在 [ L , U ] [L,U] 区间内 P P 的倍数,把它们全部标记为合数。为了不爆内存,我们将下标平移,用 is_p[i - L] 来代表数字 i 是否为合数。 第三步(统计):遍历平移后的标记数组,记录相邻两个质数的差值,不断更新最大值和最小值即可。

      C++#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e6+10; int primes[N],cnt; bool st[N]; bool is_p[N]; void init(int n){ memset(st,0,sizeof st); cnt=0; for(int i=2;i<=n;i++){ if(!st[i]){ primes[cnt++]=i; } for(int j=0;j<cnt&&iprimes[j]<=n;j++){ st[iprimes[j]]=1; if(i%primes[j]0){ break; } } } } signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); init(50000); int l,u; while(cin>>l>>u){ memset(is_p,0,sizeof is_p); if(l1) is_p[0]=1; for(int i=0;i<cnt;i++){ int p=primes[i]; int start=max(p2,(l+p-1)/pp); for(int j=start;j<=u;j+=p){ is_p[j-l]=1; } } int last=-1; int min_d=1e18,max_d=-1; int c1=-1,c2=-1,d1=-1,d2=-1; for(int i=0;i<=u-l;i++){ if(!is_p[i]){ int p=i+l; if(last!=-1){ int d=p-last; if(d<min_d){ min_d=d; c1=last; c2=p; } if(d>max_d){ max_d=d; d1=last; d2=p; } } last=p; } } if(max_d==-1){ cout<<"There are no adjacent primes.\n"; }else{ cout<<c1<<","<<c2<<" are closest, "<<d1<<","<<d2<<" are most distant.\n"; } } return 0; }

      • @ 2026-5-19 19:07:46

        没有上司的舞会 注:不知为何在519周测中只有91分……(接广了

        using namespace std;
        bool g[6007][6007],r[6007],t[6007];
        int dp[6007][2],n,l,k,h=0,z[6007];
        int dfs(int q,bool f){
            if(dp[q][f]){
            	return dp[q][f];
        	}
            int gg=0;
            if(f){
            	gg=z[q];
        	}
            for(int i=1;i<=n;i++){
                if(g[q][i]){
                    if(f){
                    	gg+=dfs(i,0);
        			}
                    else{
                    	gg+=max(dfs(i,0),dfs(i,1));
        			}
                }
            }
            dp[q][f]=gg;
            return gg;
        }
        int main(){
            cin>>n;
            for(int i=1; i<=n; i++){
                cin>>z[i];
            }
            cin>>l>>k;
            while(l!=0||k!=0){
                g[k][l]=1;
                r[l]=1;
                t[k]=1;
                cin>>l>>k;
            }
            for(int i=1;i<=n;i++){
            	if(r[i]==0&&t[i]==1){
            		h=i;
        		}
        	}
            cout<<max(dfs(h,0),dfs(h,1));
            return 0;
        }
        
        
        • @ 2026-5-12 20:31:35

          没有上司的舞会

          #include<bits/stdc++.h>
          #define int long long
          using namespace std;
          const int N=6003;
          int val[N];
          vector<int> ve[N];
          int f[N][2],n,m;
          // f[i][0] 以i为根的子树,并且第i个点没有参加舞会,子树的最大权值
          // f[i][1] 以i为根的子树,并且第i个点参加舞会,子树的最大权值
          void dfs(int x,int t){// x当前的点,t是x的父亲节点 
              if(f[x][1]!=0)return;
              f[x][1]=val[x];
              for(int y:ve[x]){//遍历x相邻的点 
                  if(y==t)continue;//y是x的父节点,continue 
                  dfs(y,x);//先算子节点y 
                  f[x][0]+=max(f[y][0],f[y][1]);//x节点没有参加,子节点y可以参加也可以不参加,取最大值 
                  f[x][1]+=f[y][0];// x节点参加,子节点y不参加 
              }
          }
          bool st[N];
          signed main(){
              cin >> n;
              for(int i=1;i<=n;i++){
                  cin >> val[i];//输入每个点的权值 
              }
              int a,b,root; 
              while(1){
                  cin >> a >> b;
                  ve[b].push_back(a);//邻接表存图  单向图 
                  st[a]=1;
                  if(a==0 && b==0) break;
              }
              for(int i=1;i<=n;i++){
                  if(!st[i]) root=i;
              }
               
              dfs(root,0);
              cout << max(f[root][1],f[root][0]);//1号点可参加与不参加,取最大 
          }
          
          👍 5
          👀 1
          😄 1
          ❤️ 1
          🕊️ 1
          • @ 2026-5-12 19:37:01

            多重背包二进制优化 https://www.gdgzoi.com/problem.php?cid=2830&pid=2

            #include<bits/stdc++.h>
            using namespace std;
            const int N=25000;
            int n,m;
            typedef long long ll;
            ll f[N];
            int v[N],w[N];
            int main(){
                cin>>n>>m;
                int cnt=1;
                for(int i=1;i<=n;i++){
                    int vi,wi,si;
                    cin>>si>>vi>>wi;
                    int k=1;
                    while(k<=si){
                        si-=k;
                        v[cnt]=k*vi;
                        w[cnt]=k*wi;
                        k*=2;
                        cnt++;
                    }
                    if(si){
                        v[cnt]=si*vi;
                        w[cnt]=si*wi;
                        cnt++;
                    }
                }
                n=cnt;
                for(int i=1;i<n;i++){
                    for(int j=m;j>=v[i];j--){
                        f[j]=max(f[j],f[j-v[i]]+w[i]);
                    }
                }
                cout<<f[m];
                return 0;
            }
            
            • @ 2026-5-12 18:14:32

              多重背包 未经授权不得使用

              #include<bits/stdc++.h>
              using namespace std;
              const int N=2005,V=505;
              int n,v;
              long long m[N],w[N],s[N];
              long long dp[2][V];
              vector<pair<int,int>>q;
              int main(){
                  cin>>n>>v;
                  for(int i=1; i<=n; i++)cin>>m[i]>>w[i]>>s[i];
                  for(int i=1; i<=n; i++){
                      int k=1;
                      while(k<=m[i]){
                          q.push_back({k*w[i],k*s[i]});
                          m[i]-=k;
                          k*=2;
                      }
                      if(m[i]>0)q.push_back({m[i]*w[i],m[i]*s[i]});
                  }
                  for(auto it:q){
                      for(int j=1; j<=v; j++){
                          dp[1][j]=dp[0][j];
                          if(j>=it.first)dp[1][j]=max(dp[1][j],dp[0][j-it.first]+it.second);
                      }
                      for(int j=1; j<=v; j++){
                          dp[0][j]=dp[1][j];
                      }
                  }
                  cout<<dp[1][v];
                  return 0;
              }
              • @ 2026-4-28 18:24:02

                Problem C: 最长不下降子序列

                #include<bits/stdc++.h>
                using namespace std;
                const int N=1e3;
                int n,a[N+5],dp[N+5];
                int main(){
                    cin>>n;
                    for(int i=1; i<=n; i++)cin>>a[i];
                    a[0]=-1e9;
                    for(int i=1; i<=n; i++){
                        for(int j=0; j<n; j++){
                            if(a[i]>a[j]){
                                dp[i]=max(dp[i],dp[j]+1);
                            }
                        }
                    }
                    int ans=-1e9;
                    for(int i=1; i<=n; i++)ans=max(ans,dp[i]);
                    cout<<ans;
                    return 0;
                }
                • @ 2026-4-21 18:40:43

                  没有上司的舞会

                  #include<bits/stdc++.h>
                  using namespace std;
                  const int N=6000;
                  bool g[N+5][N+5];
                  bool fpre[N+5];
                  bool fnxt[N+5];
                  int dp[N+5][2];
                  int p[N+5];
                  int n,l,k;
                  int dfs(int u,bool f){
                  	if(dp[u][f])return dp[u][f];
                  	int res=0;
                  	if(f)res=p[u];
                  	for(int i=1; i<=n; i++){
                  		if(g[u][i]){
                  			if(f)res+=dfs(i,0);
                  			else res+=max(dfs(i,0),dfs(i,1));
                  		}
                  	}
                  	dp[u][f]=res;
                  	return res;
                  }
                  int main(){
                  	cin>>n;
                  	for(int i=1; i<=n; i++){
                  		cin>>p[i];
                  	}
                  	cin>>l>>k;
                  	while(l!=0||k!=0){
                  		g[k][l]=1;
                  		fpre[l]=1;
                  		fnxt[k]=1;
                  		cin>>l>>k;
                  	}
                  	int head=0;
                  	for(int i=1; i<=n; i++)
                  		if(fpre[i]==0&&fnxt[i]==1)
                  			head=i;
                  	cout<<max(dfs(head,0),dfs(head,1));
                  	return 0;
                  }
                  
                  
                  • @ 2026-4-21 18:34:31

                    树形·T1

                    #include<bits/stdc++.h>
                    using namespace std;
                    const int N=6e3+5;
                    int f[N][2],n;
                    vector<int>ve[N];
                    void dfs(int x,int fa){
                    	if(f[x][1])return ;
                    	f[x][1]=1;
                    	for(int y:ve[x]){
                    		if(y==fa)continue;
                    		dfs(y,x);
                    		f[x][0]+=max(f[y][1],f[y][0]);
                    		f[x][1]+=f[y][0];
                    	}
                    }
                    int main(){
                    	ios::sync_with_stdio(0),cin.tie(0);
                    	cin>>n;
                    	for(int i=1;i<n;i++){
                    		int a,b;cin>>a>>b;
                    		ve[a].push_back(b);
                    		ve[b].push_back(a);
                    	}
                    	dfs(1,0);
                    	
                    	cout<<max(f[1][0],f[1][1]);
                    	return 0;
                    } 
                    
                    • @ 2026-4-21 18:24:41

                      https://www.gdgzoi.com/problem.php?cid=2832&pid=1

                      #include<bits/stdc++.h>
                      using namespace std;
                      const int N=6000;
                      bool g[N+5][N+5];
                      int dp[N+5][2];
                      int n,u,v;
                      int dfs(int u,int pre,bool f){
                      	if(dp[u][f])return dp[u][f];
                      	int res=f;
                      	for(int i=1; i<=n; i++){
                      		if(g[u][i]&&i!=pre){
                      			if(f)res+=dfs(i,u,0);
                      			else res+=max(dfs(i,u,0),dfs(i,u,1));
                      		}
                      	}
                      	dp[u][f]=res;
                      	return res;
                      }
                      int main(){
                      	cin>>n;
                      	for(int i=1; i<n; i++){
                      		cin>>u>>v;
                      		g[u][v]=1;
                      		g[v][u]=1;
                      	}
                      	cout<<max(dfs(1,0,0),dfs(1,0,1));
                      	return 0;
                      }
                      • @ 2026-4-21 18:14:44
                        • @ 2026-4-14 19:25:35

                          T3

                          #include <bits/stdc++.h>
                          using namespace std;
                          int n,a[205];
                          long long dp[205][205];
                                 
                          long long cost(int i,int k,int j){
                              return 1ll*a[i]*a[k+1]*a[j+1];
                          }
                          int main() 
                          {
                              ios::sync_with_stdio(0);cin.tie(0);
                                 
                              cin>>n;
                              for(int i=1;i<=n;i++){
                                  cin>>a[i];
                                  a[i+n]=a[i];
                              }
                                 
                              for(int len=2;len<=n;len++){
                                  for(int i=1;i+len-1<=2*n;i++){
                                      int j=i+len-1;
                                      for(int k=i;k<j;k++){
                                          dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+cost(i,k,j));
                                      }
                                  }
                              }
                                 
                              long long ans=0;
                              for(int i=1;i<=n;i++){
                                  ans=max(ans,dp[i][i+n-1]);
                              }
                              cout<<ans;
                              return 0;
                          }
                          
                          • @ 2026-4-14 18:58:36

                            T2

                            #include <bits/stdc++.h>
                            using namespace std;
                            int n,a[55];
                            long long cost(int i,int k,int j){
                            	return 1ll*a[i]*a[k]*a[j];
                            }
                            int main() 
                            {
                                ios::sync_with_stdio(0);cin.tie(0);
                            	
                            	cin>>n;
                            	for(int i=1;i<=n;i++)cin>>a[i];
                            	long long dp[55][55];
                            	for(int i=1;i<=n;i++)dp[i][i]=0;
                            	for(int len=3;len<=n;len++){
                            		for(int i=1;i+len-1<=n;i++){
                            			int j=i+len-1;
                            			dp[i][j]=0x3f3f3f3f3f3f3f3f;
                            			for(int k=i+1;k<j;k++){
                            				dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+cost(i,k,j));
                            			}
                            		}
                            	}
                            	cout<<dp[1][n];
                                return 0;
                            }
                            
                            • @ 2026-4-14 18:23:38

                              小视野区间dp T1

                              #include <bits/stdc++.h>
                              using namespace std;
                              
                              int n, a[305];
                              int sum[305];
                              int dp[305][305];
                              
                              int main() {
                                  ios::sync_with_stdio(0); cin.tie(0);
                              
                                  cin >> n;
                                  for (int i = 1; i <= n; i++) {
                                      cin >> a[i];
                                      sum[i] = sum[i - 1] + a[i];
                                  }
                                  for (int i = 1; i <= n; i++) {
                                      dp[i][i] = 0;
                                  }
                                  for (int len = 2; len <= n; len++) {
                                      for (int i = 1; i + len - 1 <= n; i++) {
                                          int j = i + len - 1;
                                          dp[i][j] = 0x3f3f3f3f;
                                          for (int k = i; k < j; k++) {
                                              dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);
                                          }
                                      }
                                  }
                              
                                  cout << dp[1][n] << endl;
                                  return 0;
                              }
                              
                              
                              • @ 2026-4-7 19:59:16
                                
                                ```cpp
                                #include<bits/stdc++.h>
                                using namespace std;
                                int main()
                                {
                                	long long a[73];
                                	long long x;
                                	cin >> x;
                                	for(int i = 0;i <= 63;i++) a[i] = pow(i,5);
                                	//for(int i = 1;i <= 63;i++) cout << a[i] << endl;
                                    long long b[3];
                                	bool y=0;
                                	for(int i = 0;i <=63;i++)
                                	{
                                		for(int j = 0;j <=63;j++)
                                		{
                                			b[1]=i,b[2]=j;
                                			if(a[i]+a[j]==x)
                                			{
                                				b[1]=i;b[2]=-j;
                                                y=1;
                                			}
                                			if(a[i]-a[j]==x)
                                			{
                                				b[1]=i;
                                                b[2]=j;
                                				y=1;
                                			}
                                			if(y==1)break;
                                		}
                                        if(y==1)break;
                                	}
                                	cout<<b[1]<<' '<<b[2];
                                	return 0;
                                }
                                
                                
                                
                                
                                
                                • @ 2026-4-7 18:37:04

                                  C

                                  #include<bits/stdc++.h>
                                  using namespace std;
                                  int n,m,a,b,ans=0;
                                  int h[100005];
                                  bool tp[100005];
                                  int main(){
                                  	cin>>n>>m;
                                  	for(int i=1; i<=100004; i++)tp[i]=1;
                                  	for(int i=1; i<=n; i++){
                                  		cin>>h[i];
                                  	}
                                  	for(int i=1; i<=m; i++){
                                  		cin>>a>>b;
                                  		if(h[b]>=h[a])tp[a]=0;
                                  		if(h[a]>=h[b])tp[b]=0;
                                  	}
                                  	for(int i=1; i<=n; i++)if(tp[i])ans++;
                                  	cout<<ans;
                                  	return 0;
                                  }
                                  • @ 2026-4-7 18:22:33
                                    
                                    ```cpp
                                    #include<bits/stdc++.h>
                                    using namespace std;
                                    bool b[105];
                                    int main(){
                                        ios::sync_with_stdio(0);cin.tie(0);
                                        //freopen(".in","r",stdin);
                                        //freopen(".out","w",stdout);
                                        int n,k,d;cin>>n>>k;
                                        
                                        for(int j=1;j<=k;j++){
                                            cin>>d;
                                            for(int i=1;i<=d;i++){
                                                int x;cin>>x;
                                                if(b[x]==0)n--;
                                                b[x]=1;
                                            }
                                        }
                                        cout<<n;
                                        return 0;
                                    }
                                    
                                    • @ 2026-4-7 17:57:24

                                      赛时讨论区↑

                                      • @ 2026-3-31 18:11:56

                                        吴奕希 (hzzxwuyixi) @ 12 分钟前
                                        https://www.gdgzoi.com/problem.php?cid=2830&pid=2

                                        提示:该代码仅能获得70分,3个点TLE

                                        #include<bits/stdc++.h>
                                        
                                        
                                        using namespace std;
                                        const int N=2005,V=505;
                                        int n,v;
                                        int m[N],w[N],s[N];
                                        int dp[2][V];
                                        int main(){
                                            cin>>n>>v;
                                            for(int i=1; i<=n; i++)cin>>m[i]>>w[i]>>s[i];
                                            for(int i=1; i<=n; i++){
                                                for(int j=1; j<=v; j++){
                                                    for(int k=1; k<=m[i]; k++){
                                                        if(j>=w[i]*k){
                                                            dp[1][j]=max(dp[1][j],dp[0][j-w[i]*k]+s[i]*k);
                                                        }
                                                    }
                                                }
                                                for(int j=1; j<=v; j++){
                                                    dp[0][j]=dp[1][j];
                                                }
                                            }
                                            cout<<dp[1][v];
                                            return 0;
                                        }```
                                        • @ 2026-3-26 21:29:13

                                          P448题解 43.138.245.169/d/hongchang/p/P448/solution

                                          • @ 2026-3-24 20:08:06

                                            https://www.gdgzoi.com/problem.php?cid=2829&pid=5

                                            #include<bits/stdc++.h>
                                            #define ll long long
                                            using namespace std;
                                            const int N = 105,mod = 1e6+7;
                                            int n,be,en,dp[N][N*10],a[N];
                                            signed main(){
                                                ios::sync_with_stdio(false),cin.tie(0);
                                                cin >> n >> be >> en;dp[0][be] = 1;
                                                for(int i = 1 ; i < n ; i++){
                                                    cin >> a[i];
                                                    for(int j = 0 ; j <= en ; j++){
                                                        if(dp[i-1][j]){
                                                            int l = j-a[i],r = j+a[i];
                                                            if(l >= 0) dp[i][l] = 1;
                                                            if(r <= en) dp[i][r] = 1; 
                                                        }
                                                    }
                                                }
                                                 
                                                for(int i = en ; i >= 0 ; i--) if(dp[n-1][i]) {cout << i;return 0;}
                                                cout << "-1";return 0;
                                                return 0;
                                            }
                                            
                                            • @ 2026-3-24 20:05:56

                                              https://www.gdgzoi.com/problem.php?cid=2829&pid=4

                                              #include<bits/stdc++.h>
                                              #define ll long long
                                              using namespace std;
                                              const int N = 105,mod = 1e6+7;
                                              int n,m,dp[N][N],a[N];
                                              signed main(){
                                                  ios::sync_with_stdio(false),cin.tie(0);
                                                  cin >> n >> m;
                                                  for(int i = 1 ; i <= n ; i++) cin >> a[i];
                                                  dp[0][0] = 1;
                                                  for(int i = 1 ; i <= n ; i++){
                                                      for(int j = 0 ; j <= m ; j++){
                                                          if(dp[i-1][j] == 0 ) continue;
                                                          for(int k = 0 ; k <= a[i]&&k+j<=m ; k++){
                                                              (dp[i][j+k] += dp[i-1][j])%=mod;
                                                          }
                                                      }
                                                  }
                                                  cout << dp[n][m];
                                                  return 0;
                                              }
                                              
                                              • @ 2026-3-24 20:04:55

                                                https://www.gdgzoi.com/problem.php?cid=2829&pid=3

                                                #include<bits/stdc++.h>
                                                #define ll long long
                                                using namespace std;
                                                const int N = 105,inf = 0x3f3f3f3f;
                                                int n,k,dp[N][N],a[N][N],put[N][N],maxx = -1;
                                                signed main(){
                                                    ios::sync_with_stdio(false),cin.tie(0);
                                                    cin >> n >> k;
                                                    for(int i = 1 ; i <= n ; i++){
                                                        for(int j = 1 ; j <= k ; j++){
                                                            cin >> a[i][j];
                                                        }
                                                    }
                                                    memset(dp,-0x3f,sizeof dp);
                                                    dp[0][0] = 0;
                                                    for(int i = 1 ; i <= n ; i++){
                                                        for(int p = i ; p <= k-n+i ; p++){
                                                            for(int j = i-1 ; j < p ; j++){
                                                                int pos = dp[i-1][j]+a[i][p];
                                                                if(pos > dp[i][p]){
                                                                    put[i][p] = j;
                                                                    dp[i][p] = pos;
                                                                }
                                                            }
                                                        }
                                                    }
                                                    int last = 0;
                                                    for(int i = n ; i <= k ; i++){
                                                        if(maxx < dp[n][i]){
                                                            last = i;
                                                            maxx = dp[n][i];
                                                        }
                                                    }
                                                    vector<int>pos(n+1);
                                                    for(int i = n ; i >= 1 ; i--){
                                                        pos[i] = last;
                                                        last = put[i][last];
                                                    }
                                                    cout << maxx << "\n";
                                                    for(int i = 1 ; i <= n ; i++) cout << pos[i] << " ";
                                                    return 0;
                                                }
                                                
                                                
                                                • @ 2026-3-24 19:47:52

                                                  erweidonggui

                                                  https://www.gdgzoi.com/problem.php?cid=2829&pid=2

                                                  #include <bits/stdc++.h>
                                                  using namespace std;
                                                  int f[2005][2005];
                                                  int main()
                                                  {
                                                      string a,b;
                                                      cin >>a>>b;
                                                        
                                                      int n=a.size();
                                                      int m=b.size();
                                                      for (int i=1;i<=n;i++)
                                                      {
                                                          for (int j=1;j<=m;j++)
                                                          {
                                                              if (a[i-1]==b[j-1])
                                                                  f[i][j]=f[i-1][j-1]+1;
                                                              else
                                                                  f[i][j]=max(f[i-1][j],f[i][j-1]);
                                                          }
                                                      }
                                                      cout <<f[n][m];
                                                  }
                                                  
                                                  
                                                  • @ 2026-3-24 19:47:13

                                                    https://www.gdgzoi.com/problem.php?cid=2829&pid=1

                                                    #include <bits/stdc++.h>
                                                    using namespace std;
                                                      
                                                    int main() {
                                                        int n;
                                                        cin >> n;
                                                          
                                                        int t[105][105];
                                                          
                                                      
                                                        for (int i = 1; i <= n; i++) {
                                                            for (int j = 1; j <= i; j++) {
                                                                cin >> t[i][j];
                                                            }
                                                        }
                                                          
                                                      
                                                        for (int i = n - 1; i >= 1; i--) {
                                                            for (int j = 1; j <= i; j++) {
                                                                t[i][j] += max(t[i + 1][j], t[i + 1][j + 1]);
                                                            }
                                                        }
                                                        cout << t[1][1] << endl;
                                                          
                                                        return 0;
                                                    }
                                                      
                                                    
                                                    
                                                    • @ 2026-3-24 19:41:11

                                                      https://www.gdgzoi.com/problem.php?cid=2829&pid=0

                                                      #include <bits/stdc++.h>
                                                      
                                                      
                                                      using namespace std;
                                                      int f[5009][5009];
                                                      int main()
                                                      {
                                                          int n,m;
                                                          cin>>n>>m;
                                                          for(int i=0;i<=n;i++)
                                                          {
                                                              f[0][i]=1;
                                                          }
                                                          for(int i=0;i<=m;i++)
                                                          {
                                                              f[i][0]=1;
                                                          }
                                                          for(int i=1;i<=n;i++)
                                                          {
                                                              for(int j=1;j<=m;j++)
                                                              {
                                                                  f[j][i]=(f[j-1][i]+f[j][i-1])%100000;
                                                                  //cout<<f[j][i]<<" ";
                                                              }
                                                              //cout<<endl;
                                                          }
                                                          cout<<f[m][n]%10000;
                                                      }```
                                                      • 1