B. Modulo Sum dp
https://codeforces.com/contest/577/problem/B
先读懂题意,substring 这个是子串说明不可以跳 subsequence这个是子序列可以跳
这个题目是一个dp,不过你需要先知道,如果n>m 那么就肯定可以,
接下来证明一下这个,如果n>m,那么设前 i 项的和为 s[i] ,因为s[i]%m取模之后 肯定再0~m-1
因为n>m 由抽屉原理可得 一定有存在 s[i]==s[j],这个所以 存在 s[i]-s[j]==0 这个就说明肯定有m的倍数
然后也容易得到如果有n==m 也是满足条件的,因为n==m要么存在s[i]==0要么就是有s[i]==s[j]
接下来说说这个dp ,
因为有上面一个分析,就可以把n的数据范围降下来到1e3
所以呢,就可以直接开数组 dp[1e3][1e3] 接下来就是转移方程,这个转移方程很好想就是这一个数选还是不选
转移方程有两种选法一个是刷表法和填表法
填表法就是枚举当前状态,从现在的往前面这里推
dp[i][j]=max(dp[i-1][j],dp[i-1][(j+m-a[i]%m)]) 当前这个j可以从之前的j直接推过来,也可以是加了a[i]%m的j推过来,如果是第二种,那么之前的应该要现在的减去a[i]%m
刷表法就是枚举之前的状态,从前面往后面推,这样子一般都会推出两种状态,所以这个一般都有两个转移方程
dp[i][j]=max(dp[i-1][j],dp[i-1][j]) 这个就是说不加这个a[i]%m
dp[i][(j+a[i]%m)%m]=max(dp[i-1][(j+a[i]%m)%m],dp[i-1][j]) 这个就是加了a[i]%m
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#define inf 0x3f3f3f3f
#define debug(x) cout<<"-----"<<" x = "<<x<<"-----"<<endl
using namespace std;
typedef long long ll;
const int mod = 1e8;
const int maxn = 5e5 + ;
int dp[][];
int a[maxn]; int main()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i=;i<=n;i++)
{
scanf("%d", &a[i]);
}
if(n>=m)
{
printf("YES\n");
return ;
}
for(int i=;i<=n;i++)
{
dp[i][a[i] % m] = ;
//printf("dpp[%d][%d]=%d\n", i, a[i] % m, dp[i][a[i] % m]);
for(int j=;j<=m;j++)
{
if(j!=a[i]%m) dp[i][j] = max(dp[i - ][j], dp[i - ][(j + m - (a[i]%m))%m]);
//printf("dp[%d][%d]=%d\n", i, j, dp[i][j]);
}
}
if (dp[n][]) printf("YES\n");
else printf("NO\n");
return ;
}
B. Modulo Sum dp的更多相关文章
- cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)
B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Codeforces Round #319 (Div. 2)B. Modulo Sum DP
B. Modulo Sum ...
- Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp
B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...
- Modulo Sum(背包 + STL)
Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- Codeforces Round #319 (Div. 2) B. Modulo Sum 抽屉原理+01背包
B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- codeforces 577B B. Modulo Sum(水题)
题目链接: B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Max Sum(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others) ...
- HDOJ(HDU).1003 Max Sum (DP)
HDOJ(HDU).1003 Max Sum (DP) 点我挑战题目 算法学习-–动态规划初探 题意分析 给出一段数字序列,求出最大连续子段和.典型的动态规划问题. 用数组a表示存储的数字序列,sum ...
- Codeforces Round #319 (Div. 2) B Modulo Sum (dp,鸽巢)
直接O(n*m)的dp也可以直接跑过. 因为上最多跑到m就终止了,因为前缀sum[i]取余数,i = 0,1,2,3...,m,有m+1个余数,m的余数只有m种必然有两个相同. #include< ...
随机推荐
- BFC的理解与应用
什么是BFC(Block formatting contexts) BFC的通俗理解: 首先BFC是一个名词,是一个独立的布局环境,我们可以理解为一个箱子(实际上是看不见摸不着的),箱子里面物品的摆放 ...
- AJ学IOS 之CoreLocation指南针小应用
AJ分享,必须精品 一:效果图示 简单的用到CoreLocation获取方位做的指南针小应用 二:制作思路 具体用到了CoreLocation相关的知识,请看上一篇博客有写 然后获取方向不需要进行授权 ...
- 06-移动web之flex布局
一.基本概念 flex布局又叫伸缩布局 .弹性布局 .伸缩盒布局 .弹性盒布局 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. ...
- 干货:python面对对象类继承简介
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:python视觉算法 PS:如有需要Python学习资料的小伙伴可以加 ...
- 通过dockerfile制作镜像
Dockerfile是一个用于构建Docker镜像的文本文件,其中包含了创建Docker镜像的全部指令.就是将我们安装环境的每个步骤使用指令的形式存放在一个文件中,最后生成一个需要的环境. Docke ...
- 实现一个简单的基于动态代理的 AOP
实现一个简单的基于动态代理的 AOP Intro 上次看基于动态代理的 AOP 框架实现,立了一个 Flag, 自己写一个简单的 AOP 实现示例,今天过来填坑了 目前的实现是基于 Emit 来做的, ...
- 移动端Vue组件库-Vant学习
全局引入 import Vant from 'vant'; //嫌麻烦就全部一次导出,虽然包会稍微有点大 import 'vant/lib/index.css'; //注意导入全局的这个css,否则布 ...
- Maven+JSP+SSM+Mysql+C3P0实现的学生管理系统
项目简介 项目来源于:https://gitee.com/wu_yun_long/student_management_system 本系统是基于Maven+JSP+SSM+Mysql+C3P0实现的 ...
- pytorch LSTM情感分类全部代码
先运行main.py进行文本序列化,再train.py模型训练 dataset.py from torch.utils.data import DataLoader,Dataset import to ...
- 用long类型让我出了次生产事故,写代码还是要小心点
昨天发现线上试跑期的一个程序挂了,平时都跑的好好的,查了下日志是因为昨天运营跑了一家美妆top级淘品牌店,会员量近千万,一下子就把128G的内存给爆了,当时并行跑了二个任务,没辙先速写一段代码限流,后 ...