版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/u012476429/article/details/24798219

题目链接

  • 题意:给两个长度分别为n和m的序列,如今有两种操作:1.分别选择两个序列的一个非空前缀,切两个前缀的最后一位同样,删除之。得到1分(仅仅累计),消耗e;2.直接删除两个序列,消耗值定于两个序列之前删除的元素个数之和,并且使得得到的分有效(之前没有有效分)
    (1 ≤ n, m ≤ 105; 1 ≤ s ≤ 3·105; 103 ≤ e ≤ 104),s代表总能量,e表示一次操作的消耗
  • 分析:
    首先,问题事实上就是转化成,进行若干次操作1。然后进行操作2
    还要找到一个判别标准。来评判较优的状态(贪心)
    每次的消耗值比較大,事实上能够计算出最大的删除次数,这个值不是非常大

    状态表示:
    简单的,一个状态能够表示为串A的位置、串B的位置、删除的次数
    可是两个串都比較长,假设用串A的位置、串B的位置来作为状态,删除次数作状态值。那么状态集合太大。

    所以仅仅能以一个串为主串DP,那么删除的次数就应该作为状态,在B的位置应该作为状态的值

    操作(状态转移):
    假如对于A的每个位置,都找到一个B中的位置(仅仅有一个选择,必定是找最靠前的)并删除,那么有些状态是遍历不到的,并且非常显然这样的方法是错误的。

    正确的想法应该是。对于A的每个元素。我们的操作是有两种的,删掉或者不删

    判别标准:
    每个状态仅仅有一个值,当前串B的位置,看看能否够推断。对于处理到A的同样位置,删除次数同样,那么在B的位置越小越好。能够作为判别标准

const int MAXN = 100001;

int ipta[MAXN], iptb[MAXN];
int dp[2][310];
vector<int> vt[MAXN];
int main()
{
// freopen("in.txt", "r", stdin);
int a, b, all, c, cnt;
while (~RIV(a, b, all, c))
{
int cur = 0;
CLR(dp, INF);
REP(i, MAXN) vt[i].clear();
cnt = (all + c - 1) / c;
FE(i, 1, a) RI(ipta[i]);
FE(i, 1, b)
{
RI(iptb[i]);
vt[iptb[i]].push_back(i);
}
int ans = 0;
FE(i, 1, a)
{
dp[cur][0] = 0;
cur ^= 1;
CLR(dp[cur], INF);
FE(j, 1, cnt)
{
int pre = dp[cur ^ 1][j - 1];
int p = upper_bound(all(vt[ipta[i]]), pre) - vt[ipta[i]].begin();
if (p == vt[ipta[i]].size()) p = INF;
else p = vt[ipta[i]][p];
dp[cur][j] = min(dp[cur ^ 1][j], p);
if (dp[cur ^ 1][j] > p && p + i + j * c <= all)
ans = max(ans, j);
}
}
WI(ans);
}
return 0;
}

Codeforces Round #243 (Div. 1)——Sereja and Two Sequences的更多相关文章

  1. Codeforces Round #243 (Div. 2)——Sereja and Swaps

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012476429/article/details/24665103 题目链接 题意: 给定一个整数 ...

  2. Codeforces Round #243 (Div. 2)——Sereja and Table

    看这个问题之前,能够先看看这个论文<一类算法复合的方法>,说白了就是分类讨论,可是这个思想非常重要 题目链接 题意: 首先给出联通块的定义:对于相邻(上下和左右)的同样的数字视为一个联通块 ...

  3. Codeforces Round #243 (Div. 1)——Sereja and Squares

    题目链接 题意: 给n个点,求能组成的正方形的个数. 四边均平行与坐标轴 大神的分析: 经典题 我们考虑每一种x坐标,显然仅仅有<= sqrt{N}个x坐标出现了> sqrt{N}次,我们 ...

  4. DP Codeforces Round #FF (Div. 1) A. DZY Loves Sequences

    题目传送门 /* DP:先用l,r数组记录前缀后缀上升长度,最大值会在三种情况中产生: 1. a[i-1] + 1 < a[i+1],可以改a[i],那么值为l[i-1] + r[i+1] + ...

  5. Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 解读

    http://codeforces.com/contest/426/problem/B 对称标题的意思大概是.应当指出的,当线数为奇数时,答案是线路本身的数 #include<iostream& ...

  6. Codeforces Round #243 (Div. 1)A. Sereja and Swaps 暴力

    A. Sereja and Swaps time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. Codeforces Round #243 (Div. 2) C. Sereja and Swaps

    由于n比较小,直接暴力解决 #include <iostream> #include <vector> #include <algorithm> #include ...

  8. Codeforces Round #243 (Div. 2) B. Sereja and Mirroring

    #include <iostream> #include <vector> #include <algorithm> using namespace std; in ...

  9. Codeforces Round #243 (Div. 2) A. Sereja and Mugs

    #include <iostream> #include <vector> #include <algorithm> #include <numeric> ...

随机推荐

  1. 百度前端开发规范 by fex-team

    github:https://github.com/fex-team/styleguide 离线版本: 链接:http://pan.baidu.com/s/1gfr857l 密码:cvk3 注:只支持 ...

  2. delphi中如何将string类型的字符串数据转化成byte[]字节数组类型的数据

    var  S:String;  P:PChar;  B:array of Byte;begin  S:='Hello';  SetLength(B,Length(S)+1);  P:=PChar(S) ...

  3. MD5 algorithm in Objective C

    How to calculate the MD5 in objective C ? md5 is available on the iPhone and can be added as an exte ...

  4. VS2010 MFC中制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图)

    VS2010 MFC中制作Visual Studio风格的停靠侧栏窗口(CDockablePane里嵌套FormView表单视图) 1. 在资源窗口里新建一个FormView的Dialog,修改ID为 ...

  5. 14.【nuxt起步】-Pm2 和nuxt服务运行

    1.安装pm2 npm install pm2 -gd 2.启动 Pm2 start ./bin/www 3. pm2 save 4.Pm2 startup 5.Pm2 save修改 package. ...

  6. HDOJ 2829 Lawrence

    四边形不等式优化DP Lawrence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. hdu5417(BC)

    题目链接:点这儿 Victor and Machine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K ( ...

  8. Oracle无安装客户端安装方法

    一. 1)下载Oracle客户端:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.htm ...

  9. GitHub上编程语言流行度分析

    GitHub已然是全球最流行的开源项目托管平台,项目数量眼下已经达到了千万级别.Adereth在Counting Stars on GitHub一文提供了一个很有意思的思路,那就是籍GitHub用户通 ...

  10. 15:取近似值ApproximateValue

    题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述:输入一个正浮点数值 输出描述:输出该数值的近似整数值 输入例子 ...