zoj 3872(dp)
来源:互联网 发布:c语言代码 编辑:程序博客网 时间:2024/06/05 02:23
题意:我们定义数列的美为该数列的所有不相同的元素的总和,下面给你一个数列,让你求它所有子数列的美的总和。
思路:当新增加一个数,它会和前面所有数都组成一个子数列,如1 2 3当加入第四个元素4时,就会有新增4个子数列 “4”,”3,4”,”2,3,4”,”1,2,3,4”,设它们为S1,当1 2 3 4 加入第五个元素5时,则会新增”5”,”4,5”,”3,4,5”,”2,3,4,5”,”1,2,3,4,5”,设它们为S2,那么易得S2=S1+5*A[5]。dp[4]=dp[3]+S1,
dp[5]=dp[4]+S2,所以dp[5]=2 * dp[4]-dp[3]+5 * A[5]。而当有重复时比如 2 3 3 dp[3]=2*dp[2]-dp[1]+3 * A[3]-2 * A[2]。因为在前两个字数列中元素A[3]重复了两次。
语言表达能力不好,概括一下就是
dp[i]=2 * d[i-1]-dp[i-2]+i * A[i]-j * A[j] (A[j]=A[i])
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[100005];long long dp[100005];int vis[1000005];int main(){ int t; cin>>t; while(t--) { int n; memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); dp[1]=a[1]; vis[a[1]]=1; for(int i=2;i<=n;i++) { dp[i]=2*dp[i-1]-dp[i-2]+i*a[i]-vis[a[i]]*a[i]; vis[a[i]]=i; } cout<<dp[n]<<endl; }}
阅读全文
0 0
- zoj 3872(dp)
- ZOJ 3872 - Team Formation(DP)
- zoj 3872(dp)
- ZOJ - 3822 Domination (DP)
- ZOJ-3626(树形DP)
- zoj-3329(***期望+dp)
- ZOJ--3822(概率dp)
- ZOJ 3905 Cake(dp)
- ZOJ 3905 Cake(dp)
- ZOJ 3949 (树形DP)
- zoj 3640(期望dp)
- ZOJ 3872-Beauty of Array(递推||DP)
- ZOJ 3872 Beauty of Array( DP思想 )
- ZOJ 3872 Beauty of Array (思维 dp思想)
- [dp] zoj 3872 Beauty of Array
- ZOJ 3872 Beauty of Array【dp】
- [dp] zoj 3872 Beauty of Array
- ZOJ 3872 Beauty of Array(DP)
- 生成Excel并返回浏览器弹出下载的简单实现
- 区间第k大(4种求法)
- Supervisor后台进程管理工具
- Android开发之定义万能适配器
- 循环结构中break、continue、return和exit的区别
- zoj 3872(dp)
- nova-compute的resource_tracker
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 E.Territorial Dispute(凸包)
- 表的索引
- Minimum Sum LCM UVA
- 学习笔记:Java 多线程编程核心技术(第一章)
- 数据库字段varchar和Nvarchar区别
- 交换机和路由器的区别有哪些?
- 数据分析学习之roc曲线