题意:给出一个长字符串,再给一个短字符串,进行匹配,如果第i个恰好匹配,则 +8,;如果不匹配,可以给长或短字符串添加-,先后匹配,这样-3,

连续的长字符串添加-,需要减去一个4;也可不给添加-,则-5。

析:dp[i][j][0] 表示第一个字符串第 i 个位置,和第二个字符串的第 j 个位置相匹配,dp[i][j][1] 表示第一个字符串第 i 个位置,和第二个字符串的第 j 个位置加_相匹配.

那么怎么转移呢?如果s1[i] == s2[j] 那么 dp[i+1][j+1][0] = Max(dp[i+1][j+1][0], Max(dp[i][j][0], dp[i][j][1])+8);意思就是匹配的加8分,

如果不相等,dp[i+1][j+1][0] = Max(dp[i+1][j+1][0], Max(dp[i][j][0], dp[i][j][1])-5);不匹配,减 5 呗。

dp[i][j+1][1] = Max(dp[i][j+1][1], Max(dp[i][j][0]-7, dp[i][j][1]-3));
dp[i+1][j][1] = Max(dp[i+1][j][1], Max(dp[i][j][0]-7, dp[i][j][1]-3));

同样的意思。注意,这个题说学生的串不过50,但是你开小于100就会WA。。。。真坑啊

代码如下:

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <cstring>
#include <set>
#include <queue>
#include <algorithm>
#include <vector>
#include <map>
#include <cctype>
#include <cmath>
#include <stack>
#define freopenr freopen("in.txt", "r", stdin)
#define freopenw freopen("out.txt", "w", stdout)
using namespace std; typedef long long LL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const double inf = 0x3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int maxn = 1e6 + 5;
const int mod = 1e8;
const char *mark = "+-*";
const int dr[] = {-1, 0, 1, 0, 1, 1, -1, -1};
const int dc[] = {0, 1, 0, -1, -1, 1, 1, -1};
int n, m;
const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
inline int Min(int a, int b){ return a < b ? a : b; }
inline int Max(int a, int b){ return a > b ? a : b; }
inline LL Min(LL a, LL b){ return a < b ? a : b; }
inline LL Max(LL a, LL b){ return a > b ? a : b; }
inline bool is_in(int r, int c){
return r >= 0 && r < n && c >= 0 && c < m;
}
char s1[110], s2[110];
int dp[110][110][2]; int main(){
int T; cin >> T;
while(T--){
scanf("%s", s1); scanf("%s", s2);
int len1 = strlen(s1);
int len2 = strlen(s2);
for(int i = 0; i <= len1; ++i)
for(int j = 0; j <= len2; ++j)
for(int k = 0; k < 2; ++k)
dp[i][j][k] = -INF; for(int i = 0; i <= len1; ++i) dp[i][0][0] = 0;
for(int i = 0; i < len1; ++i){
for(int j = 0; j < len2; ++j){
if(s1[i] == s2[j]) dp[i+1][j+1][0] = Max(dp[i+1][j+1][0], Max(dp[i][j][0], dp[i][j][1])+8);
else dp[i+1][j+1][0] = Max(dp[i+1][j+1][0], Max(dp[i][j][0], dp[i][j][1])-5); dp[i][j+1][1] = Max(dp[i][j+1][1], Max(dp[i][j][0]-7, dp[i][j][1]-3));
dp[i+1][j][1] = Max(dp[i+1][j][1], Max(dp[i][j][0]-7, dp[i][j][1]-3));
}
} int ans = -INF;
for(int i = 0; i <= len1; ++i)
ans = Max(ans, Max(dp[i][len2][0], dp[i][len2][1]));
printf("%d\n", ans);
}
return 0;
}

UVaLive 6697 Homework Evaluation (DP)的更多相关文章

  1. UVAlive 6697 Homework Evaluation

    借鉴了别人的博客啊,自己写写给以后的自己看吧 给出两个字符串,用第二个字符串去匹配第一个字符串,可以对第二个字符串进行删除或插入操作,一位匹配成功得8分失败-5分,如果插入或删除,对于连续插入或删除m ...

  2. HDU 1074 Doing Homework (dp+状态压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:学生要完成各科作业, 给出各科老师给出交作业的期限和学生完成该科所需时间, 如果逾期一 ...

  3. HDU3693 Math Teacher's Homework ---- 数位DP

    HDU3693 Math Teacher's Homework 一句话题意 给定$n, k以及m_1, m_2, m_3, ..., m_n$求$x_1 \oplus x_2 \oplus x_3 \ ...

  4. UVALive - 6952 Cent Savings dp

    题目链接: http://acm.hust.edu.cn/vjudge/problem/116998 Cent Savings Time Limit: 3000MS 问题描述 To host a re ...

  5. UVALive - 6529 找规律+dp

    题目链接: http://acm.hust.edu.cn/vjudge/problem/47664 Eleven Time Limit: 5000MS 问题描述 In this problem, we ...

  6. UVaLive 6801 Sequence (计数DP)

    题意:给定一个序列,有 n 个数,只有01,然后你进行k次操作,把所有的1变成0,求有多种方法. 析:DP是很明显的,dp[i][j] 表示进行第 i 次操作,剩下 j 个1,然后操作就两种,把1变成 ...

  7. UVaLive 7374 Racing Gems (DP,LIS)

    题意:以辆赛车可以从x轴上任意点出发,他的水平速度允许他向每向上移动v个单位,就能向左或向右移动v/r个单位(也就是它的辐射范围是个等腰三角形) 现在赛车从x轴出发,问它在到达终点前能吃到的最多钻石. ...

  8. UVALive 6947 Improvements(DP+树状数组)

    [题目链接] https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=sho ...

  9. HDU 1074 Doing Homework(DP状态压缩)

    题意:有n门功课需要完成,每一门功课都有时间期限以及你完成所需要的时间,如果完成的时间超出时间期限多少单位,就会被减多少学分,问以怎样的功课完成顺序,会使减掉的学分最少,有多个解时,输出功课名字典序最 ...

随机推荐

  1. [Warning] TIMESTAMP with implicit DEFAULT value is deprecated

    As indicated by the warning, to turn off the nonstandard behaviors, enable the new explicit_defaults ...

  2. [转] 解析Qt资源文件使用

    解析Qt资源文件使用 转自:http://mobile.51cto.com/symbian-270121.htm 本文详细的介绍了Qt文件的使用,和大部分GUI框架设计工具一样,Qt也引入了资源文件系 ...

  3. Linux Autotools

    /********************************************************************** * Linux Autotools * 说明: * 我们 ...

  4. activiti 源码笔记之startProcess

    rumtimeService.startProcessInstanceByXX方法将启动流程的任务委派给StartProcessInstanceCmd,此时会根据rumtimeService.star ...

  5. 【阅读】提问的智慧+有效的报告BUG

    这两项可谓是我们测试人员的基本要求了,不过实话说的是,我自己这两方面很薄弱.哎!!! 这两篇文章都看过了,不过我在这也记个笔记吧.督促自己!!! <提问的智慧> <如何有效地报告Bu ...

  6. php 格式化数字 位数不足前面加0补足

    本文引用自 http://www.fengfly.com/plus/view-62827-1.html 补0: <?php $var = sprintf("%03d", 12 ...

  7. [Everyday Mathematics]20150224

    设 $A,B$ 是 $n$ 阶实对称矩阵, 它们的特征值 $>1$. 试证: $AB$ 的特征值的绝对值 $>1$.

  8. 8、NFC技术:让Android自动打开网页

    创建封装Uri的NdefRecord  public  NdefRecord  createUri(String  uriString);  public  NdefRecord  cre ...

  9. Oracle V$SESSION详解

    V$SESSION是APPS用户下面对于SYS.V_$SESSION 视图的同义词. 在本视图中,每一个连接到数据库实例中的session都拥有一条记录.包括用户session及后台进程如DBWR,L ...

  10. Php 笔记1-----request和 response

    不能大于2KB 第一次学习 php,  因为以前习惯了 .net, 所以 刚开始总是按照.net的  思路去思考, 怎么获取 客户端发过来的  request对象啊,  怎么设置response啊.. ...