HDU 4455 Substrings(线性dp,很有意思)
题意:这个题给你n个数,然后有q组询问,无修改,每次询问一个长度x,问你所有长度为x的区间价值加和是多少,区间的价值的计算是这样定义的,一个区间的价值就等于这个区间中不同数字的个数
思路:看了题解虽然理解了,但感觉还是很难想啊,原本这个题卡在了怎么把n2的降维成n的,这个题目也算是很经典的一个套路吧,疯狂预处理,把所需要的信息不断转化,疯狂降维预处理,然后达到On递推,感觉对于dp[i]和dp[i-1]之间的关系,单点贡献的那一部分不怎么容易想到,而且想到了单点贡献,也想不到怎么预处理,QAQ
附传送门一只
代码:
#include <bits/stdc++.h> using namespace std; typedef long long LL;const int maxn=1e6+7; int n; int a[maxn],cnt[maxn]; LL dp[maxn],vis[maxn]; int main() {while(~scanf("%d",&n),n){for(int i=1;i<=n;i++)scanf("%d",&a[i]);int res=0;memset(dp,0,sizeof(dp));for(int i=n;i>=1;i--){if(!dp[a[i]])dp[a[i]]=1,res++;cnt[n-i+1]=res;}memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){dp[i]=vis[a[i]];vis[a[i]]=i;}memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){vis[i-dp[i]]++;}vis[n+1]=0;for(int i=n;i>=1;i--)vis[i]+=vis[i+1];dp[1]=n;for(int i=2;i<=n;i++){dp[i]=dp[i-1]-cnt[i-1]+vis[i];}int q;scanf("%d",&q);while(q--){int x;scanf("%d",&x);printf("%lld\n",dp[x]);}}return 0; }
转载于:https://www.cnblogs.com/lalalatianlalu/p/9981507.html
HDU 4455 Substrings(线性dp,很有意思)相关推荐
- HDU 4455 Substrings(dp+树状数组优化)
题意: 给定一个序列ai,个数为n.再给出一系列w: 对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数 解析: 一直想不出来怎么转移,看了网络上面的题解才明白怎么做 ...
- HDU 4293 Groups (线性dp)
OJ题目:click here~~ 题目分析:n个人分为若干组 , 每一个人描写叙述其所在的组前面的人数和后面的人数.求这n个描写叙述中,最多正确的个数. 设dp[ i ] 为前i个人的描写叙述中最多 ...
- POJ - 1050 To the Max(最大连续子段和,线性dp)
题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...
- 牛客 - 「火」皇家烈焰(线性dp)
题目链接:点击查看 题目大意:给出一个字符串表示扫雷游戏,其中: 0:这个格子没有烈焰,且其左右两个格子均没有烈焰 1:这个格子没有烈焰,且其左右两个格子中只有一个烈焰 2:这个格子没有烈焰,且其左右 ...
- CH 5102 Mobile Service(线性DP)
CH 5102 Mobile Service \(solution:\) 这道题很容易想到DP,因为题目里已经说了要按顺序完成这些请求.所以我们可以线性DP,但是这一题的状态不是很好设,因为数据范围有 ...
- 算法模板:动态规划之线性DP【沈七】
算法模板:动态规划之线性DP 前言 线性DP 数字三角形模型 摘花生 最小路径和 不同路径模型 不同路径(有障碍) 过河卒 (综合应用) 最长上升子序列模型 木棍加工 导弹拦截 完结散花 参考文献 前 ...
- 2020.8.3【算协集训】线性dp
线性dp A - 超级楼梯 (HDU-2041) 分析 代码 B - 一只小蜜蜂... (HDU-2044) 分析 代码 C - 母牛的故事 (HDU-2018) 分析 代码 D - Common S ...
- 动态规划之线性DP题集
动态规划之线性DP 文章目录 动态规划之线性DP (一)LIS问题 最长上升子序列 (朴素动规) (二分+贪心+动规) 最大子序和 (动规) (贪心) 最长连续递增序列 (动规) (双指针) 俄罗斯套 ...
- HDU 4915 Parenthese sequence DP
[题目大意] 题目很短,自己读题吧. [思路] 其实是个很有意思的题. 在括号匹配中,当前的栈存的全是'('.那么,我们可以用dp[i][j]表示到了第i个字符,栈内存j个'('的方法数.这样显然是可 ...
- 动态规划:线性dp、背包问题、区间3
区间DP 2955 -- Brackets 给定一个由字符 a1a2 ... an 组成的括号序列,你的目标是找到最长的正则括号序列的长度,它是 s 的子序列.也就是说,您希望找到最大的 m,使得对于 ...
最新文章
- 测验2: Python基本图形绘制 (第2周)
- 传智播客JavaWeb day11--事务的概念、事务的ACID、数据库锁机制、
- 为何解析浏览器地址参数会为null_request 包中出现 DNS 解析超时的探究
- Centos7安装MariaDB10.28稳定版
- Cadence Virtuoso IC617的启动和新建工程
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](四)
- [Nescafé41]异化多肽(多项式求逆元)
- 【Datawhale IntelVINO学习笔记】OpenVINO音频和人体姿态识别
- easydarwin 安装_centos服务器安装部署搭建 EasyDarwin【步骤详解】
- 贝塞尔插值曲线绘制软件设计
- Visual C++ 图像与文字的合成
- 一文读懂keepalive的工作原理
- python dict的get函数
- 【推荐系统论文精读系列】(一)--Amazon.com Recommendations
- 关于高版本web3j调用okhttp3.RequestBody.create(Ljava/lang/String;Lokhttp3/MediaType;)Lokhttp3/RequestBody异常
- Xcode 使用 code snippets (代码块)Xcode 11以上
- idea中提示程序包不存在或cannot resolve symbol
- Windows 10 使用命令行格式化磁盘/U盘
- 中国国有资本投资运营公司“十四五”投资规划及发展动向展望报告2022-2028年
- android设置路由器,如何在Android手机上设置无线路由器以实现WiFi互联网访问