博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zoj3872 Beauty of Array (dp)
阅读量:5009 次
发布时间:2019-06-12

本文共 1709 字,大约阅读时间需要 5 分钟。

题目链接:

题意:

给你n个数,求这n个数的连续子序列中不算重复的数的和,比如第二个样例他的子序列就是{2},{2,3},{2,3,3},{3},{3,3},{3};但每个子序列中重复的元素不被算入,所以他们的总和就是2+5+5+3+3+3=21;

思路:

考虑到当前第i个数,对答案的贡献是多少,dp[i]表示第i个数所做的贡献

比如 1, 2, 3

----------------------------------

1   dp[1] = 1;

----------------------------------

2

1,2   dp[i] = dp[i-1]+a[i]*i = 1 + 2*2

----------------------------------

3

2,3

12,3  dp[i] = dp[i-1]+a[i]*i = 5 + 3*3   红色部分是dp[i-1],  对于第i个数的贡献,只是把第i-1个数的贡献,加上当前第i个数出现了几次(i)

-----------------------------------

例如有序列1,2,3,4,5

若在末尾加入一个序列中没有的数N,则新产生的子序列为:

N;

5,N;

4,5,N;

3,4,5,N;

2,3,4,5,N;

1,2,3,4,5,N;

则增加的输出值为:

5;

4,5;

3,4,5;

2,3,4,5;

1,2,3,4,5;

的输出值(dp[5])+6*N;

若在末尾加入一个序列中出现过的数字3,则新产生的子序列为:

3;

5,3;

4,5,3;

3,4,5,3

2,3,4,5,3

1,2,3,4,5,3

0,1,2,3,4,5,3

其中,最后四个子序列,因为末尾的3是第二次出现,故输出值里不将其计入,因此有效的子序列只有前面3个; dp[7] = dp[6]+7*a[7]-vis[a[7]]*a[7];  vis[a[i]]表示a[i]这个数最后出现的位置。

最终答案就是所有dp值加起来

代码:

#include
using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst int INF = 0x3f3f3f3f;const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}//const int maxn = 1e5+10;int T;int vis[maxn*10];ll dp[maxn],a[maxn];int main(){ cin >> T; while(T--){ MS(vis); MS(dp); int n = read(); for(int i=1; i<=n; i++) a[i] = read(); ll ans = 0; for(int i=1; i<=n; i++){ dp[i] = dp[i-1] + (i-vis[a[i]])*a[i]; vis[a[i]] = i; ans += dp[i]; } cout << ans << endl; } return 0;}

 

转载于:https://www.cnblogs.com/yxg123123/p/7257383.html

你可能感兴趣的文章
EasyUI datagrid 的多条件查询
查看>>
Mac升级bash到最新版本
查看>>
利用vagrant打包系统--制作自己的box
查看>>
美女与硬币问题
查看>>
计算几何算法概览 (转)
查看>>
Notepad++的ftp远程编辑功能
查看>>
hdu 1257 最少拦截系统(简单贪心)
查看>>
Spring Boot 系列教程5-热部署-devtools模块
查看>>
[原] 别人家老婆
查看>>
CentOS7忘记root密码
查看>>
C语言基础课第一次作业
查看>>
php字符串截取
查看>>
理解DP(持续更新)
查看>>
python 发送邮件
查看>>
yii2 phpexcel导出excel
查看>>
使用VC数据断点让你避免很多烦忧(转)
查看>>
后缀自动机
查看>>
ZZNU-OJ-2118 -(台球桌面碰来碰去,求总距离)——模拟到爆炸【超时】的不能AC的代码...
查看>>
Sunday串匹配算法 C语言实现
查看>>
学习方法
查看>>