zoukankan      html  css  js  c++  java
  • hdu1243 dp (类最长公共子序列)

    题意:射击演习中,已知敌人出现的种类顺序,以及自己的子弹种类顺序,当同种类的子弹打到同种类的敌人时会得到相应分数,问最多能得多少分。

    这题的题意很好理解,而且模型也很常见,是带权值的类最长公共子序列问题。但是我 WA 了四发```第一发,t 定义了两次,并执意要从下标 1 开始读(这个貌似没问题的)。第二次是改了之后 dp 数组的转移方程没有写对。第三 WA 是改了转移方程还是没有改对Orz ,第四 WA 是```我的内心几乎是崩溃的,恩,还是没有改对……

     1 #include<stdio.h>
     2 #include<string.h>
     3 #define max(a,b) a>b?a:b
     4 
     5 int dp[2105][2105],v[30];
     6 
     7 int main(){
     8     char s1[50],s2[2105],s3[2105];
     9     int n;
    10     while(scanf("%d",&n)!=EOF){
    11         scanf("%s",s1);
    12         int i,t,j,ans=0;
    13         for(i=0;i<n;i++){
    14             scanf("%d",&t);
    15             v[s1[i]-'a']=t;
    16         }
    17         memset(dp,0,sizeof(dp));
    18         scanf("%s%s",s2,s3);
    19         int l2=strlen(s2),l3=strlen(s3);
    20         for(i=1;i<=l2;i++){
    21             for(j=1;j<=l3;j++){
    22                 if(s2[i-1]==s3[j-1]){
    23                     dp[i][j]=dp[i-1][j-1]+v[s2[i-1]-'a'];
    24                 }
    25                 else {
    26                     dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
    27                 }
    28                 ans=max(ans,dp[i][j]);
    29             }
    30         }
    31         printf("%d
    ",ans);
    32     }
    33     return 0;
    34 }
    View Code

     

  • 相关阅读:
    Asp.net 动态为TreeView创建结点
    JQuery 获取鼠标位置
    几个常见的“算法”小程序
    C# 99乘法表
    C#打印一个等腰倒三角形
    JQuery点击行(tr)实现checkBox选中,反选时移除和添加样式.
    使用FIFO策略缓存对象
    Firefly
    when you say nothing at all
    linux tar 压缩解压命令
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4322446.html
Copyright © 2011-2022 走看看