题意

    有两个栈分别有n和m个数,每次从任意栈中取出一个数,令k为不同输出序列的总数,其中第i种输出序列的产生方式有ai个,求Σai2。 n <= 500

  分析

    此题是关于ai2转换。咋一看此题好像很复杂,但巧妙转化ai2之后就变得极其简单。

    ai2到底是什么呢?如果单纯把它当做一个值来看待,可能做不出来。ai表示第i种输出序列的产生方式,而ai2就是其产生方式对数。

    设F[i][j][a][b]为第一种方案中,第一个栈去了i个数,第二个栈取了j个数,第二种方案中第一个栈取了a个数,第二个栈中取了b个数,两种方案得到相同的输出序列的方案数。

    转移只需要枚举两种方案下一个各选什么。

    其实i+j = a+b,b的那一维是可以省去的,时间复杂度为O(n3)

  程序

 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream> using namespace std; const int MOD = ;
const int maxn = ;
int n, m, a[maxn], b[maxn];
int f[maxn][maxn][maxn]; int main()
{
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
scanf("%d %d", &n, &m);
for (int i = ; i <= n; ++i)
scanf("%d", &a[i]);
for (int i = ; i <= m; ++i)
scanf("%d", &b[i]);
for (int i = ; i <= n; ++i)
for (int j = ; j <= m; ++j)
for (int k = ; k <= n; ++k)
{
if (k > i+j)
break ;
if (a[i+] == a[k+] && i+ <= n && k+ <= n)
(f[i+][j][k+] += f[i][j][k]) %= MOD;
if (a[i+] == b[i+j-k+] && i+ <= n && i+j-k+ <= m)
(f[i+][j][k] += f[i][j][k]) %= MOD;
if (b[j+] == a[k+] && j+ <= m && k+ <= n)
(f[i][j+][k+] += f[i][j][k]) %= MOD;
if (b[j+] == b[i+j-k+] && j+ <= m && i+j-k+ <= m)
(f[i][j+][k] += f[i][j][k]) %= MOD;
}
printf("%d\n", f[n][m][n]);
return ;
}

某DP题目4的更多相关文章

  1. DP题目列表/弟屁专题

    声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 10 ...

  2. dp题目列表

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

  3. dp题目

    从别的地方看来,最近一直在啃DP,有个目标,更有动力了. 1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包; ...

  4. 插头DP题目泛做(为了对应WYD的课件)

    题目1:BZOJ 1814 URAL 1519 Formula 1 题目大意:给定一个N*M的棋盘,上面有障碍格子.求一个经过所有非障碍格子形成的回路的数量. 插头DP入门题.记录连通分量. #inc ...

  5. 很好的一个dp题目 Codeforces Round #326 (Div. 2) D dp

    http://codeforces.com/contest/588/problem/D 感觉吧,这道题让我做,我应该是不会做的... 题目大意:给出n,L,K.表示数组的长度为n,数组b的长度为L,定 ...

  6. 两道很好的dp题目【4.29考试】

    A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现 ...

  7. 题目1453:Greedy Tino(dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1453 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  8. 题目1452:搬寝室(dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1452 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  9. 题目1042:Coincidence(最长公共子序列 dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1042 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  10. 概率dp+期望dp 题目列表(一)

    表示对概率和期望还不是很清楚定义. 目前暂时只知道概率正推,期望逆推,然后概率*某个数值=期望. 为什么期望是逆推的,例如你求到某一个点的概率我们可以求得,然后我们只要运用dp从1~n每次都加下去就好 ...

随机推荐

  1. Tomcat参数调优包括日志、线程数、内存【转】

    [Tomcat中日志打印对性能测试的影响] 一般都提供了这样5个日志级别: ▪ Debug ▪ Info ▪ Warn ▪ Error ▪ Fatal 由于性能测试需要并发进行压力测试,如果日志级别是 ...

  2. fullpage.js 具体使用方法

    1.fullpage.js  下载地址 https://github.com/alvarotrigo/fullPage.js 2.fullPage.js 是一个基于 jQuery 的插件,它能够很方便 ...

  3. highcharts自定义导出文件格式(csv) highcharts的一些使用心得

    highcharts是国外的一个图表插件,包括各种数据图形展示,柱形图,线性图等等,是手机端和pc端最好的图表插件之一,相比于百度的echarts更加轻便和易懂.链接http://www.hchart ...

  4. untiy3d学习笔记

    Unity3d 记录 1.63讲 主要讲了menicam 从3D软件里面导出过后,注意如果是人物模型命名一定要非常清晰并且对称.选择到模型后等到到humanoid后可以使用menicam.然后使用me ...

  5. Mysql授权允许远程访问

    MySQL Community Edition(GPL) 在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户是没有远程访问的权 ...

  6. 创建 dblink

    目的:oracle中跨数据库查询       两台数据库服务器db_A(本地)和db_B(远程192.168.1.100),db_A下用户user_a 需要访问到db_B下user_b的数据解决:查询 ...

  7. bootstrap使用前注意点和盒子模型

    bootstrap注意事项: https://getbootstrap.com/docs/4.0/getting-started/introduction/#quick-start 盒子模型: htt ...

  8. Windows实现内网IPMI端口转发

    https://www.cnblogs.com/yunweis/p/8024346.html

  9. pyqt5简单登陆界面

          登陆界面姓名输入错误会弹出错误信息.正确就会弹出第二个窗体. # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import Q ...

  10. LR字符串处理

    Action() { strchr和strrchr: //strchr:查找指定字符在一个字符串中第一次出现的位置,然后返回指向该位置的指针. //char *strchr(const char *s ...