• hdu1243反恐训练营


    之前卡了我很久,结果今天一看,原来是最长相同序列,这坑爹的,被题目吓到了啊

    不过呢,我还是不知道自己错在哪里,网上跟差不多的代码,结果我错了啊

    还有没有出示数据的题目都是耍流氓....耍流氓

    作为一道最长相同序列,我做错了,关键的两个for我都是从0开始的,不过在数据上是通过了啊,结果呢,wrong answer 

    #include "iostream"
    #include "string.h"
    using namespace std;
    int max(int a,int b){return a>b?a:b;}
    int dp[2005][2005];
    int main(){
      char list[2005],list1[2005],list2[2005];
      int num[2005],n,i,a,j,len1,len2;
      while(cin>>n){
        cin>>list;
        for(i=0;i<n;i++){
          cin>>a;
          num[list[i]]=a;
        }
        cin>>list1>>list2;
        len1=strlen(list1);
        len2=strlen(list2);
        for(i=0;i<len1;i++)dp[i][0]=0;
        for(j=0;j<len2;j++)dp[0][j]=0;
    
        for(i=0;i<len1;i++){
          for(j=0;j<len2;j++){
            if(list1[i]==list2[j])dp[i][j]=dp[i-1][j-1]+num[list1[i]];
            else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
            //cout<<dp[i][j]<<' ';
          }
          //cout<<endl;
        }
        cout<<dp[len1-1][len2-1]<<endl;
      }
      return 0;
    }

    看看人家的代码呢?结果是accept,但是数据上呢,是wrong answer,不知道是什么情况来的

    #include <stdio.h>
    #include <string.h>
    
    int dp[2005][2005],ar[2005];
    
    int max(int x,int y)
    {
        return x>y?x:y;
    }
    
    int main()
    {
        int n,a,len1,len2,i,j;
        char str[2005],ans1[2005],ans2[2005];
        while(scanf("%d",&n)!=EOF)
        {
            scanf("%s",str);
            for (i=0;i<n;i++)
            {
                scanf("%d",&a);
                ar[str[i]]=a;
            }
            scanf("%s%s",ans1+1,ans2+1);
            len1=strlen(ans1);
            len2=strlen(ans2);
            for (i=0;i<len1;i++)dp[i][0]=0;
            for (j=0;j<len2;j++)dp[0][j]=0;
            for (i=1;i<len1;i++)
            {
                for (j=1;j<len2;j++)
                {
                    if(ans1[i]==ans2[j])dp[i][j]=dp[i-1][j-1]+ar[ans1[i]];
                    else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
                }
            }
            printf("%d
    ",dp[len1-1][len2-1]);
        }
        return 0;
    }

    一切的原因是归在

    cin>>list;

    strlen(list+1);

    上面,我也不知道其中编译器是怎么运行的

  • 相关阅读:
    Oracle 增加修改删除字段
    asp.net,简单权限。存取读XML
    点击按钮出现60秒禁用倒计时js代码
    vb.net 接口POST方式传参数提交返回值
    给VS2005 2008等添加代码对照线,对齐线
    sql 、linq、lambda 查询语句的区别
    C# asp.net 实现导出Excel
    SQL中使用update inner join和delete inner join
    导入EXCEL表时,提示"找不到可安装的ISAM"怎么办
    ASP.NET后台通过输出JavaScript弹出窗口小结 弹窗弹框
  • 原文地址:https://www.cnblogs.com/dowson/p/3287592.html
Copyright © 2020-2023  润新知