hdu 4455 动态规划
思路:用sum[i]表示区间长度为i的不相同数的个数和,假使所有的数都不相同,那么sum[i]=sum[i-1]+n-i+1-later[i-1]; later[i-1]表示的是序列最后面的长度为i-1的序列不同数的个数。这个式子的意义是每个长度为i-1的序列扩展为长度为i的序列,其不同数的个数会加1,一共有n-i+1个长度为i-1的序列能扩展,因为最后面的一个长度为i-1的序列肯定是扩展不了的(后面没数了),故要将最后面的长度为i-1的序列减去,即减later[i-1]。
那么对存在相同数的情况就是,任何数x,如果距离其上次出现的位置小于等于i-1,那么在n-i+1的基础上就要减去1。但这个并不好求,可以转换下;我们知道整个序列中一共存在n个x与pre[x]的关系,那么只要找出x-pre[x]>i-1的个数就行了,因为每个x-pre[x]>i-1在从长度为i-1扩展到长度为i时,都能为总和贡献1.故我们每次都用n减去所有长度小于等于i-1的关系个数。那么sum[i]=sum[i-1]-later[i-1]+n-Sum(i-1)。此处大粗的Sum是指求x-pre[x]小于等于i-1的个数和。
#include<cstring>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cstdio>
#define Maxn 1200010
using namespace std;
int pre[Maxn],interv[Maxn],later[Maxn],num[Maxn];
__int64 sum[Maxn];
int main()
{
int n,m,q,i,j,w;
while(scanf("%d",&n)!=EOF,n)
{
memset(pre,,sizeof(pre));
memset(interv,,sizeof(interv));
memset(later,,sizeof(later));
memset(sum,,sizeof(sum));
memset(num,,sizeof(num));
for(i=;i<=n;i++){
scanf("%d",num+i);
//if(pre[num[i]])
interv[i-pre[num[i]]]++;
pre[num[i]]=i;
}
memset(pre,,sizeof(pre));
for(i=n;i>=;i--)
{
if(!pre[num[i]])
later[n-i+]=later[n-i]+,pre[num[i]]=;
else
later[n-i+]=later[n-i];
}
sum[]=n;
__int64 S=n;
for(i=;i<=n;i++)
{
sum[i]=sum[i-]-later[i-];
S-=interv[i-];
sum[i]+=S;
}
scanf("%d",&m);
for(i=;i<=m;i++){
scanf("%d",&w);
printf("%I64d\n",sum[w]);
}
}
return ;
}
hdu 4455 动态规划的更多相关文章
- hdu 4455 Substrings(计数)
题目链接:hdu 4455 Substrings 题目大意:给出n,然后是n个数a[1] ~ a[n], 然后是q次询问,每次询问给出w, 将数列a[i]分成若干个连续且元素数量为w的集合,计算每个集 ...
- hdu 1087 动态规划之最长上升子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1087 Online Judge Online Exercise Online Teaching Online C ...
- Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)
http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...
- HDU 4455.Substrings
Substrings Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 1003 动态规划
http://acm.hdu.edu.cn/showproblem.php?pid=1003 这几天开始刷动归题目,先来一道签到题 然而做的并不轻松, 没有注意到边界问题, WA了几发才发现 #inc ...
- hdu 4055 && hdu 4489 动态规划
hdu 4055: 一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶: 参照他的思路和代码: #include<cstdio> #include<cstring> # ...
- hdu 4745 动态规划
思路:特水的一个最长回文子序列动态规划.比赛时硬卡第一题,49WA后终于AC,可惜没时间做这题,结果成绩也就可想而知了.兔子跳一样权值的石头,并且一个正跳,一个反跳,这不就是个回文子序列吗?????! ...
- hdu 4711 动态规划
思路:其实这题是个挺水的动态规划,一开始就能AC,可是不知道错哪了,瞎改瞎交,WA了数十次.AC之后怎么改都是AC,也不知道改了什么地方,郁闷死了~~~难道开始时的测试数据有问题??? dp[i][j ...
- HDU 4455(dp)
题意:给定一个序列ai,个数为n.再给出一系列w:对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数. 思路:动态规划,用dp[w]表示当前长度为w的时候的权值和.显 ...
随机推荐
- Struts2通配符映射
1.一个Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 2.通配符映射规则 –若找到多个匹配, 没有通配符的 ...
- SOP、DIP、PLCC、TQFP、PQFP、TSOP、BGA封装解释
1. SOP封装SOP是英文Small Outline Package的缩写,即小外形封装.SOP封装技术由1968-1969年菲利浦公司开发成功,以后逐渐派生出SOJ(J型引脚小外形封装).TSOP ...
- iOS应用内HTTP服务上传文件
相信很多朋友都用过AirAV.100tv这类iOS视频播放应用中通过Wifi,从PC上输入Web地址上传文件到iOS设备上,我也一直想实现这个功能,苦于知识掌握有限,后来在其他群友的指导下参照很多大神 ...
- 关于cocoapods添加静态库的奇葩配置
不多说,直接上代码 当引入这个静态库时,一开始死活在编辑时找不到这个静态库. 直到看到这个贴子:http://stackoverflow.com/questions/19189463/cocoapod ...
- 关于EL表达式的大小写问题。谁来帮我解答?
最近在学习ssh框架,今天遇到了一个非常奇怪的问题.我想在jsp页面中的到session中的数据.<%=s.getUserYes() %>这样写能得到数据, ${sessionScope. ...
- 在VS.NET中根据条件设置不同的MainForm
在VS.NET中有时候需要根据不同的条件设置不同的MainForm,例如:在程序第一次运行时候打开设置基本信息或服务器信息窗口等. 1.找到VS.NET中设置MainForm的窗口: 2.在编辑窗口中 ...
- radio select的 option使用
1 radio的使用 <td id="sex">性别: <input type="radio" name=&quo ...
- 关于配置php源代码管理环境的几点注意
1.如果你的项目原本就是utf-8的编码,而你设置eclipse的工作空间的默认编码为utf-8后,或者在项目文件夹上右键属性设置了编码类型后依旧没有效果,而是需要在每一个文件上右键属性设置为utf- ...
- PostgreSQL的 initdb 源代码分析之二十
继续分析: setup_privileges(); 展开: 这是设置权限. 其cmd是:"/home/pgsql/project/bin/postgres" --single -F ...
- Codeforces Round #329 (Div. 2) B. Anton and Lines 逆序对
B. Anton and Lines Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/593/pr ...