zoukankan      html  css  js  c++  java
  • Genetic Fraud

    http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=24020

    根据一般的字符串的dp,考虑串a的前i个,和串b的前j个

    那么我们用dp【i】【j】表示包含a串的第i个字母 b串的第j个字母 可以获得的最大长度

    那么显然有:因为要包含 i j 所以如果 abs(a[i]-b[j])<=1 那么 dp[i][j]=dp[i-1][j-1]+1; 否则 dp[i][j]=0;

    View Code
    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    #include<algorithm>
    #define maxn 1002
    using namespace std;
    char s1[maxn],s2[maxn];
    int dp[maxn][maxn];
    int n;
    void solve(int num)
    {
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                    {
                    if(abs(s1[i]-s2[j])<=1)
                    dp[i][j]=dp[i-1][j-1]+1;//满足条件,加1
                    else
                    dp[i][j]=0;//不满足 为0
                    if(dp[i][j]>=num)
                    {
                    cout<<"POSITIVE"<<endl;//如果已经大于了一半 输出满足并返回
                    return ;
                    }
                    }
          }
          cout<<"NEGATIVE"<<endl;
    //没有符合条件的 输出不满足
          return ;
    }
    int main()
    {
        int test;
        cin>>test;
        while(test--)
        {
            cin>>n;
            memset(s1,0,sizeof(s1));
            memset(s2,0,sizeof(s2));
            scanf("%s %s",s1+1,s2+1);
    
            solve((n+1)/2);//要满足长度大于一半
        }
        return 0;
    }
  • 相关阅读:
    bfs,队列
    Wannafly挑战赛22 A计数器(裴蜀定理 gcd)
    素数筛模板
    HDU
    HDU
    控制精度-----直接截取,不需四舍五入
    jstl下载与配置
    B. Treasure Hunt
    动态数组vector
    Manacher算法
  • 原文地址:https://www.cnblogs.com/cs1003/p/2664327.html
Copyright © 2011-2022 走看看