[Essai d'introduction aux algorithmes] Partie 4 Techniques avancées de conception et d'analyse (dp, gourmand, amortissement)

Programmation dynamique

réflexion du cours mit:
optimisation du problème lcs:
1. Compressez la complexité de l'espace sur On comme suit

#include<iostream>
#include<cstdio>
using namespace std;
int a[100005];
int b[100005];
int dp[2][100005];
int read()
{
    
    
 int x=0;
 char ch=getchar();
 while(ch<'0'||ch>'9')
 {
    
    
  ch=getchar();
 } 
 while(ch>='0'&&ch<='9')
 {
    
    
  x=x*10+ch-'0';
  ch=getchar();
 }
 return x;
}
int main()
{
    
    
 //freopen("in.txt","r",stdin);
 int n=read();
 for(int i=1;i<=n;i++)
 {
    
    
  a[i]=read();
 }
 for(int i=1;i<=n;i++)
 {
    
    
  b[i]=read();
 }
 for(int i=1;i<=n;i++)
 {
    
    
  for(int j=1;j<=n;j++)
  {
    
    
   if(a[i]==b[j])
   {
    
    
    dp[i&1][j]=dp[(i-1)&1][j-1]+1;//奇偶优化,对于dp数组而言,其第一维存储的i可以压缩至i&1(奇偶)的种类数(2),而不影响结果 
   }
   else
   {
    
    
    dp[i&1][j]=max(dp[(i-1)&1][j],dp[i&1][j-1]);
   }
  }
 }
 printf("%d",dp[n&1][n]); 
 return 0; 
}

2. Enregistrer le chemin

Enregistrez le chemin dans un espace min (n, m)

Modifier le problème de distance
Soit A et B deux chaînes. Convertissez la chaîne A en chaîne B avec une manipulation minimale des caractères. Les opérations sur les caractères mentionnées ici incluent (1) supprimer un caractère; (2) insérer un caractère; (3) changer un caractère en un autre caractère. Le nombre minimum d'opérandes de caractères utilisés pour transformer la chaîne A en chaîne B est appelé la distance d'édition de la chaîne A à B, notée d (A, B). Pour la chaîne A et la chaîne B données, calculez la distance d'édition d (A, B).

Je suppose que tu aimes

Origine blog.csdn.net/carvingfate/article/details/108665220
conseillé
Classement