题目链接:点击查看

题目大意:给出一个长度为 n 的数列 a ,现在要求找到满足条件的四元对 ( i , j , k , l ) 的个数:

  1. 1 <= i < j < k < l <= n
  2. a[ i ] == a[ k ] && a[ j ] == a[ l ]

题目分析:n 只有 3000 ,显然支持 n * n * logn 的时间复杂度,所以可以枚举四元对中其中的两个位置,然后去计算剩下的两个位置中有多少个符合条件的,基于此,我们可以设计两个简单的 dp 辅助实现,dp1[ i ][ j ] 代表的是 [ 1 , i ] 区间内,j 出现的次数,相似的,dp2[ i ][ j ] 代表的是 [ i , n ] 区间内,j 出现的次数,这样我们就可以 n * n 去枚举 j 和 k ,对于每一对 j 和 k ,我们都可以直接得出 k 后面有多少个等于 a[ j ] 的个数,以及 j 前面有多少个等于 a[ k ] 的个数了,其乘积的累加和便是答案

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=3e3+100;LL a[N],dp1[N][N],dp2[N][N];//dp1[i][j]:[1,i]内有多少个j,dp2[i][j]:[i,n]内有多少个j int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld",a+i);for(int i=1;i<=n;i++)dp1[0][i]=dp2[n+1][i]=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)dp1[i][j]=dp1[i-1][j];dp1[i][a[i]]++;}for(int i=n;i>=1;i--){for(int j=1;j<=n;j++)dp2[i][j]=dp2[i+1][j];dp2[i][a[i]]++;}LL ans=0;for(int j=1;j<=n;j++)for(int k=j+1;k<=n;k++)ans+=dp1[j-1][a[k]]*dp2[k+1][a[j]];printf("%lld\n",ans);}return 0;
}

CodeForces - 1400D Zigzags(简单dp)相关推荐

  1. Codeforces 41D Pawn 简单dp

    题目链接:点击打开链接 给定n*m 的矩阵 常数k 以下一个n*m的矩阵,每一个位置由 0-9的一个整数表示 问: 从最后一行開始向上走到第一行使得路径上的和 % (k+1) == 0 每一个格子仅仅 ...

  2. hdu2067 简单dp或者记忆化搜索

    题意: 小兔的棋盘 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. POJ1088:滑雪(简单dp)

    题目链接:  http://poj.org/problem?id=1088 题目要求: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.求可以滑落的最长长度. 题目解析: 首先要先排一 ...

  4. 第三讲 数学与简单DP【完结】

    目录 1205. 买不到的数目 [数学结论题] 1211. 蚂蚁感冒 [模拟 / 推理] 1216. 饮料换购 [简单 / 模拟] 2. 01背包问题 [板子题] 1015. 摘花生 [简单DP] 8 ...

  5. hdu 2881(简单dp)

     题意:n*n的矩阵,里面有m个格子是有任务要去完成的,t,x,y表示要在第t秒到达(x,y)的格子完成任务,问你最多可以完成多少 解题思路:简单dp,将时间排个序后就是LIS #include< ...

  6. Codeforces 919D Substring (拓扑图DP)

    Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...

  7. P1005 矩阵取数游戏(__int128模板/简单dp)

    转跳P1005 题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的 n \times mn×m 的矩阵,矩阵中的每个元素 a_{i,j}a i,j ​ 均为非负整数.游戏规则如下: 每次取数时 ...

  8. 最少拦截系统,简单dp,(学长说这是贪心?!。。。。。。也是醉了)

     description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天, ...

  9. HDU 1158【简单dp】

    题意:给你一个项目,需要几个月来完成买,同时也给你每个月最少需要的工人数.并且告诉你hiring,firing每个工人的钱数,以及每个月应付每个工人的工资.求项目完成时最小花费. 这是个简单dp,思路 ...

最新文章

  1. Spring Context 你真的懂了吗?
  2. 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场
  3. [html] DOM节点的种类有哪些?
  4. dbc连接mysql_Spring WebFlux 使用 R2DBC 访问 MySQL
  5. Python设置网卡自己封装的Internet类 WMI
  6. mui HTML5plus 批量上传文件
  7. 让你变成优秀程序员的几个小习惯
  8. 7、JsonCpp简单使用(3)
  9. weixin-java-tools工具-微信开发常见问题
  10. Android 高德地图No implementation found for long com.autonavi.amap.mapcore.MapCore
  11. 一文详解工业相机和镜头选取
  12. linux数据库安装
  13. Excel卡死无响应问题
  14. 有趣的硬币 java_有趣的硬币作文
  15. linux ios开发环境,iOS开发环境搭建(Linux版)
  16. 绝对免费搭建不限速私人网盘5T存储空间:Gearhost免费空间+OneIndex程序+Onedrive免费账号
  17. 【休闲益智】【HTML】看字说颜色
  18. c语言入门,通俗易懂
  19. 大数据学习计划【2019经典不断更新】
  20. Twitter相关功能集成

热门文章

  1. php 文件名汉字utf8,php utf8编码上传中文文件名出现乱码_PHP教程
  2. python casefold lower_Python学习之路(2)——字符串方法casefold和lower的区别(Python3.5)-Go语言中文社区...
  3. 传统配置形式存在的问题
  4. 优化器是怎么得到执行计划的?
  5. NIO和BIO如何影响应用程序的设计-设置处理线程数
  6. 添加tomcat7插件设置jdk编译版本
  7. 百万数据报表:分析以及解决办法
  8. tomcat_部署项目的方式
  9. MyBatis从缓存查找数据的依据
  10. 单例设计模式-ThreadLocal线程单例