题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5086

题目大意:给出长度为n的数组,然后要求累计里面的每个子串的和。

解题思路:这道题直接枚举肯定不行,所以要找递推关系。

假设:{1,2,3,4}为某一个序列,假设我们已经找到了{1,2,3},接下来把{4}加入进去;

由于{1,2,3}已经有{1},{2},{3},{1,2},{2,3},{1,2,3},那么我们需要观察,把{4}放进去会有哪些影响,

首先会多出{3,4},{2,3,4},{1,2,3,4},{4},这是突破口,我们只要找到[k,3]的所有和,再把{4}给补上即可。

这样我们就有递推式:dp[i] = dp[i-1] + tmp[i-1] + i * a[i],其中dp[i]表示前i个序列的子串和,tmp[i]表示sum{[k,i]},k-i的总和。

由于要取模,所以必须把所有的数都要变成__int64,这里WA若干次。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int maxn =  447005;
const int mod = 1e9+7;
int n;
__int64 a[maxn],dp[maxn],tmp[maxn];int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i = 1; i <= n; i++)scanf("%I64d",&a[i]);dp[1] = tmp[1] = a[1];for(int i = 2; i <= n; i++)tmp[i] = (tmp[i-1] + i * a[i] % mod) % mod;for(int i = 2; i <= n; i++)dp[i] = (dp[i-1] + tmp[i-1] + i * a[i] % mod) % mod;printf("%I64d\n",dp[n]);}return 0;
}

hdu 5086(dp)相关推荐

  1. HDU 5928 DP 凸包graham

    给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...

  2. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  3. HDU 4832(DP+计数问题)

    HDU 4832 Chess 思路:把行列的情况分别dp求出来,然后枚举行用几行.竖用几行,然后相乘累加起来就是答案 代码: #include <stdio.h> #include < ...

  4. hdu 2059(dp)

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  5. HDU 3646 DP + 二分

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...

  6. Hdu 4293 DP

    题意: n个人说自己前面有多少人 后面有多少人 求出说真话人数最多的情况 每个样例有 一个 n 表示n个人 接下来 n 行有a b 表示他前面的人数和后面的人数 思路: 如果已经知道了其中一组的人数~ ...

  7. hdu 3905(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3905 思路:dp[i][j]表示前i分钟,睡了j分钟收获的的最大价值,并记tmp_dp[i][j]为从 ...

  8. hdu 4472 dp

    http://acm.hdu.edu.cn/showproblem.php?pid=4472 第一直觉找规律,第二直觉 把树拆成子树,然后递推或者DP 然后发现不行,然后才发现自己题都没读,,,, d ...

  9. hdu 1003 dp

    确实十分经典的一题,但我是参照dicuss 的题目做的,真是惭愧啊, 希望可以多接触些dp类型的题,提高自己水平 格外注意 sum 的代表含义, #include<iostream> #i ...

最新文章

  1. 从Netflix的Hystrix框架理解服务熔断和服务降级
  2. Ubuntu 使用国内apt源
  3. 树莓派DVR猫眼监控,贴广告的人看你往哪跑!
  4. Table control中列隐藏实现方法
  5. BZOJ4698: Sdoi2008 Sandy的卡片
  6. 如何安装python3.7.6_CentOS7安装Python3.7.6,配置pip,安装配置virtualenv和virtualenvwrapper...
  7. verilog赋多位值_verilog赋值
  8. 结婚生娃和去核电站参观,哪个更安全?
  9. 【多线程】并发执行指定数量的线程
  10. 网络协议osi模型_网络协议|OSI模型第二层数据链路层
  11. maven导入模块后重新导入有两个一样的_Testng在Maven中配置Reportng中文乱码解决及笔记记录...
  12. 物联网中C语言与汇编语言,ARM Cortex-M架构CPU中C语言和汇编语言的混合编程
  13. ssh-keygen的使用方法及配置authorized_keys两台linux机器相互认证
  14. 软件工程Java毕设 SSM药品管理系统(含源码+论文)
  15. excel vba 字典使用方法学习
  16. 2014年数学建模美赛题目原文及翻译[个人思路]
  17. 批量修改后缀名的方法,批量修改文件后缀名
  18. 前方荆棘遍地,愿砥砺前行
  19. mysql的ace什么概念_ACE(03):努力了,总会有收获
  20. 【多智能体感知与协同调度】

热门文章

  1. 新康众闫顺成:数据中台建设中的得与失
  2. 神策沙龙回顾:大数据技术和金融、房产、理财的深度结合
  3. leetcode-581-Shortest Unsorted Continuous Subarray
  4. 语音留言无法在电话上播放
  5. PHP基础系列之正则表达式(一)
  6. js在客户端创建文件——ActiveXObject
  7. python 没有了matlab的fscanf功能,我该怎么办
  8. 冯小刚导演系列公益短片之林心如版
  9. 迅雷(XUNLEI)的工作原理揭密
  10. how to add the language things at the idiscover