当前位置: 首页 > news >正文

AtCoder Regular Contest 180 C. Subsequence and Prefix Sum (dp好题 辅助数组)

题目

给你一个长度为 N(N<=10)的整数序列 A=(A1,A2,⋯,AN)。

你要准确地执行一次下面的操作:

  • 选择 A 的一个非空子序列(不一定连续),并用它的累积和替换。
  • 更精确地说,首先选择一个索引序列 (i1,i2,⋯,ik) ,使得 1≤i1<i2<⋯<ik≤N
  • 序列 k ( 1≤k≤N)的长度可以自由选择。
  • 然后,对于每个 j ( 1≤j≤k),用 ∑1≤x≤jAix​​ 替换 Aij 的值。
  • 所有选择的索引同时进行替换。

求操作后 A 的可能序列数。

思路来源

洛谷题解

题解

由于子序列当前和为0的时候,选ai和不选ai实际是一种方案,所以把这种情况择出来,

选ai的时候转移进g数组,不选ai的时候忽略,

那么对于0 1 1 2来说,

要么只选了0,还是在f里,

要么选了0,选了一个1,这种情况和只选0是一样的,不在f里统计,在g里统计一次

要么选了0,选了一个1,选了1个2,这种情况仍在f里统计,也只统计一次,从g转移回来即可

做法挺巧妙的,g实际是一个辅助数组,dp还是很锻炼思维的

代码

#include <algorithm>
#include <atcoder/modint>
#include <iostream>using namespace std;
using LL = atcoder::modint1000000007;const int kN = 101, kV = 11;int n, a[kN];
LL _f[kN][kN * kV * 2], *f[kN];
LL _g[kN * kV * 2], *g = _g + kN * kV;int main() {ios::sync_with_stdio(0), cin.tie(0);cin >> n;for (int i = 1; i <= n; ++i) {cin >> a[i];}for (int i = 0; i <= n + 1; ++i) {f[i] = _f[i] + kN * kV;}f[0][0] = 1;int l = 0, r = 0;for (int i = 1; i <= n; ++i) {for (int j = l; j <= r; ++j) {f[i][j] += f[i - 1][j];if (j) {f[i][j + a[i]] += f[i - 1][j] + g[j];}}g[a[i]] = f[i - 1][0];l += min(0, a[i]), r += max(0, a[i]);}LL ans = 0;for (int i = l; i <= r; ++i) {ans += f[n][i];}cout << ans.val();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Go语言实现依赖注入
  • Git代码管理规范
  • 负载均衡详细概念介绍之(四层和七层实现)
  • 微信小程序怎样实现前后台交互?
  • Git命令从入门到精通
  • 在Debian 8上安装Git的方法
  • Apache HTTPD 换行漏洞(CVE-2017-15715)
  • Qt题目知多少-3
  • Redis的Bitmaps结构常用命令总结
  • vue框架的安全设计
  • 后端学习笔记(5)--查询
  • 在哪些行业中,3D 技术发挥了重要作用?
  • GORM 自动迁移与命名策略
  • 算法【滑动窗口】
  • app逆向抓包技巧:noProxy、vpn与sslpinning检测绕过
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【剑指offer】让抽象问题具体化
  • Angular Elements 及其运作原理
  • canvas 绘制双线技巧
  • CentOS 7 修改主机名
  • const let
  • Facebook AccountKit 接入的坑点
  • IDEA 插件开发入门教程
  • JAVA SE 6 GC调优笔记
  • js递归,无限分级树形折叠菜单
  • mysql innodb 索引使用指南
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Vue小说阅读器(仿追书神器)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 小李飞刀:SQL题目刷起来!
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​决定德拉瓦州地区版图的关键历史事件
  • !!Dom4j 学习笔记
  • #NOIP 2014#Day.2 T3 解方程
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (差分)胡桃爱原石
  • (力扣)1314.矩阵区域和
  • (南京观海微电子)——I3C协议介绍
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)ObjectiveC 深浅拷贝学习
  • (转)visual stdio 书签功能介绍
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)详解PHP处理密码的几种方式
  • ..回顾17,展望18
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .so文件(linux系统)
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Transactional类内部访问失效原因详解
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)