• Approximate Search


    题目链接:Gym-101492H

    动态规划,应该是比较基础的,可是自己就是不会QAQ....

     1 /* 把使用机会当成“花费” */
     2 # include <iostream>
     3 # include <cstdio>
     4 # include <cstring>
     5 # include <string>
     6 # include <cstdlib>
     7 # include <cmath>
     8 # include <ctime>
     9 # include <climits>
    10 # include <memory>
    11 # include <functional>
    12 # include <algorithm>
    13 # include <bitset>
    14 # include <set>
    15 # include <map>
    16 # include <stack>
    17 # include <vector>
    18 # include <deque>
    19 # include <queue>
    20 # include <iomanip>
    21 # include <utility>
    22 using namespace std;
    23 
    24 # define lson l,m,rt<<1
    25 # define rson r,m+1,rt<<1|1
    26 # define lowbit(x) (x&(-x))
    27 # define lcm(a,b) (a*b/__gcd(a,b))
    28 typedef long long ll;
    29 const ll mod=1e9+7;
    30 const int maxn=1e6+50;
    31 const double pi=acos(-1.0);
    32 const int eps=1e-8;
    33 
    34 char s[205], t[1000005];
    35 int dp[maxn][105];
    36 //dp[i][j]表示t[1-i]和t[1-j]能比配需要的最小的k值
    37 int main()
    38 {
    39     int n, m, k;
    40     memset(dp, 125, sizeof(dp));
    41     cin>>m>>n>>k;
    42     scanf("%s", s+1);
    43     scanf("%s", t+1);
    44 
    45     //如果模式串s是空串,则k为0
    46     for(int i=0; i<=n; i++ )
    47         dp[i][0] = 0;
    48 
    49     for(int i=1; i<=n; i++ )//t
    50     {
    51         for(int j=1; j<=m; j++ )//s
    52         {
    53             //s中前(j-1)个和t中前(i-1)个匹配后,s[j]和t[i]直接匹配
    54             if( s[j]==t[i] )
    55                 dp[i][j] = min(dp[i-1][j-1], dp[i][j]);//不需要”花费“
    56 
    57                 //在前面已经匹配的基础上,删掉t[i],此时s[j]依旧没有匹配上,所以是dp[i][j-1],而不是dp[i][j]
    58                 dp[i][j-1] = min(dp[i][j-1], dp[i-1][j-1]+1);
    59                 //在前面已经匹配的基础上,增加一个t[i]与s[j]匹配,但由于是虚拟的增加,所以仍是dp[i-1][j],而不是dp[i][j];
    60                 dp[i-1][j] = min(dp[i-1][j], dp[i-1][j-1]+1);
    61                 //在前已经匹配的基础上,换t[i]
    62                 dp[i][j] = min(dp[i][j], dp[i-1][j-1]+1);
    63         }
    64     }
    65 
    66     for(int i=1; i<=n; i++ )
    67     {
    68         if( dp[i][m]<=k )
    69         {
    70             cout<<'S'<<endl;
    71             return 0;
    72         }
    73     }
    74     cout<<'N'<<endl;
    75     return 0;
    76 }
  • 相关阅读:
    Python Data Analysis Library¶
    matadon/mizuno
    MySQL 5.1参考手册
    Apache Derby: Quick Start
    JRuby大捷:ThoughtWorks宣布Mingle发布在即
    RailsWithH2InJNDIOnJetty
    Embedded Jetty and Spring: The Lightweight Antidote for Java EE Complexity
    window下安装解压缩版mysql/zip压缩文件包非install安装程序
    Chapter 9. Extending Workbench
    Mysql手动增加一列_Blog of Grow_百度空间
  • 原文地址:https://www.cnblogs.com/wsy107316/p/11391289.html
Copyright © 2020-2023  润新知