Sum of Paths CodeForces - 1467D
Tagscombinatorics dp math *2200

题意:

定义一条好的路径,当且仅当从任意点出发之后恰好经过了 k 次移动,定义这条路径的权值为经过点权值的总和(可重),进行 q 次修改,每次将ak 改为 x ,询问此时所有‘好’路径的权值总和.
例如样例:

5 1 5
3 5 1 4 2
1 9
2 4
3 6
4 6
5 2

将第一位换成9就成了9 5 1 4 2 ,对应的答案就是62

题解:

dp动态规划
根据题目,我们要计算每个格子的贡献,设dp[i][j]表示走了j步当前在i点的路径总数
i点可能是从i-1来的也可能是i+1来的
状态转移:
dp[i][k] = dp[i-1][k-1] + dp[i+1][k-1]
dp[i][k]也可以理解成在i点还需要走k步才能到达任意点的路径总数(相当于反着想)
那么怎么考虑每个点的贡献?
如果当前点i走了m步,方案数是dp[i][m],因为一共走k步,所以还有k-m步要走,方案数是dp[i][m-k],该点贡献就是∑m=0m=kdp[i][m] * dp[i][m-k]
对于每次修改,修改第i点的值,先减去原本第i点的贡献,再加新的贡献

代码:

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=5e3+9;
const int mod=1e9+7;
ll a[maxn],c[maxn];
ll dp[maxn][maxn];
int main()
{int n,k,p;cin>>n>>k>>p;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)dp[i][0]=1;for(int i=1;i<=k;i++)//步数 {for(int j=1;j<=n;j++)//当前格子 {dp[j][i]=(dp[j-1][i-1]+dp[j+1][i-1])%mod;}}ll sum=0;for(int i=1;i<=n;i++)//当前格子 {for(int j=0;j<=k;j++){c[i]=(c[i]+(dp[i][j]*dp[i][k-j])%mod)%mod;}}for(int i=1;i<=n;i++)sum=(sum+(a[i]*c[i])%mod)%mod;for(int i=1;i<=p;i++){ll pos,x;cin>>pos>>x;sum=((sum-(a[pos]*c[pos])%mod)%mod+mod)%mod;a[pos]=x;sum=(sum+(a[pos]*c[pos])%mod)%mod;printf("%lld\n",sum);}return 0;
}
/*
Input
5 1 5
3 5 1 4 2
1 9
2 4
3 6
4 6
5 2
Output
62
58
78
86
86
*/

Sum of Paths CodeForces - 1467D相关推荐

  1. Two Paths CodeForces - 14D(暴力+树的直径)

    As you know, Bob's brother lives in Flatland. In Flatland there are n cities, connected by n - 1 two ...

  2. Sum of Medians CodeForces - 85D(线段树+离散化)

    Sum of Medians 题目链接:CodeForces - 85D 题意:对于一个集合set(有序的)有三个操作(集合是有序的,下标由1开始): 一:add x:在集合中加入x; 二:del  ...

  3. Berland and the Shortest Paths CodeForces - 1005F(最短路树)

    最短路树就是用bfs走一遍就可以了 d[v] = d[u] + 1 表示v是u的前驱边 然后遍历每个结点 存下它的前驱边 再用dfs遍历每个结点 依次取每个结点的某个前驱边即可 #include &l ...

  4. Codeforces Round #599 (Div. 2) E. Sum Balance 图转换 + 子集dp + 环

    传送门 文章目录 题意: 思路: 题意: 思路: 首先我们知道如果所有数的和summodk!=0sum\bmod k!=0summodk!=0那么此时无解,否则我们设need=sum/kneed=su ...

  5. codeforces 85D. Sum of Medians

    二次联通门 : codeforces 85D. Sum of Medians /*codeforces 85D. Sum of Medians正解线段树或是平衡树结果用vector暴力卡过去了 */ ...

  6. Codeforces Round #695(Div. 2)

    Codeforces Round #695 (Div. 2) 1467A Wizard of Orz 1467B Hills And Valleys 1467C Three Bags 1467D Su ...

  7. codeforces round div2,3周赛补题计划(从开学到期末)

    1. 本学期场次 从2020.09.19-2021.01.18,一共18周. 题号 场次 日期 备注 1475 Codeforces Round #697 (Div. 3) 1.25 1474 Cod ...

  8. Codeforces Round #695 (Div. 2)ABCD题解详析

    A. Wizard of Orz 首先保证第一块板子是999,那么第二块板子不可能是999,那么令第二块板子为888 只要在第二块板到达888的时候按下暂停,那么第一块是999,第三块板子也是999 ...

  9. Codeforces数学1600day3[数学CodeForces - 1213D2, CodeForces - 1165E 数论,CodeForces - 1165D 因子分解]

    ps:day2太水了不写qwq A - Equalizing by Division (hard version) CodeForces - 1213D2 题目大意:给你n个数和一个k,然后你可以执行 ...

最新文章

  1. java获取date的时分秒_Java 之 Date 获取 年月日时分秒
  2. 《统一沟通-微软-实战》-7-配置-3-响应组
  3. 魅族建立基于M8的Android开源项目
  4. 启动Spark Shell,在Spark Shell中编写WordCount程序,在IDEA中编写WordCount的Maven程序,spark-submit使用spark的jar来做单词统计
  5. 设计模式之策略模式在地铁票价系统中的应用
  6. CCF201709-2 公共钥匙盒
  7. Ajax请求步骤(十)
  8. 好未来AI Lab-文本检测方法分析
  9. 7. Flask 大型程序的结构
  10. linux查看java堆栈信息_Java运行状态分析2:获取线程堆栈信息
  11. print (re.findall((?:abc)+,abcabcabc))
  12. matlab无法打开.m文件查看
  13. Duplicate Manager Pro for Mac(重复文件查找工具)破解版安装
  14. linux文件系统目录操作实验报告,Linux操作系统实验报告
  15. Linux下修复U盘坏块,快速修复U盘坏块的方法
  16. http+json 格式的接口开发实践与思考
  17. linux驱动开发架构
  18. java自学-常见的API(String、ArryList)
  19. D3D学习笔记1-D3D9设备的初始化
  20. python语音验证码识别_基于Python的手机语音验证码api调用代码实例

热门文章

  1. 老娘不就是没化妆吗?你几个意思?
  2. 奥林匹克数学竞赛教练员汇编,最牛奥数资料全集!
  3. 意大利归还中国文物;翟天临咪蒙成考公务员题目;携程回应五一机票涨价;腾讯未成年人网络保护体系上线;这就是今天的大新闻...
  4. java web容器_Java Web容器安全
  5. z变换公式表_如何使用标准正态分布表?
  6. android管理activity顺序,android activity 六个主要函数以及一些调用顺序
  7. 为什么年龄大了近视还增加_年龄明明一样大,为什么有人长得年轻,有人显老呢?...
  8. php获取某地的ip,php获取本土实际IP
  9. java并发框架支持锁包括,jdk1.8锁
  10. 2020研究生数学建模结果_关于举办2020年全国研究生数学建模大赛的通知