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 ;
}

最新文章

  1. [LeetCode] Remove Element 移除元素
  2. Effective C++ -----条款29:为“异常安全”而努力是值得的
  3. BP(back propagation)反向传播
  4. Floyd | | jzoj[1218] | | [Usaco2009 Dec]Toll 过路费 | | BZOJ 1774 | | 我也不知道该怎么写
  5. VS2013中常用的一些快捷键
  6. 使用.NET中的Action及Func泛型委托
  7. [C语言 - 10] C语言保留字
  8. BZOJ 1033 杀蚂蚁
  9. VC++ try catch (转)
  10. 关于DCLP实现的单例模式的一些想法
  11. ORA-04092: COMMIT 不能在触发器中
  12. 1102: 零起点学算法09——继续练习简单的输入和计算(a-b)
  13. 笔记:Struts 2.3.31 配置说明
  14. 转载:解决微信OAuth2.0网页授权回调域名只能设置一个的问题
  15. Ocr答题辅助神器 OcrAnswerer4.x,通过百度OCR识别手机文字,支持屏幕窗口截图和ADB安卓截图,支持四十个直播App,可保存题库
  16. 简单搭个webapp开发框架
  17. 阿里支付宝java接口
  18. Codeforces816B Karen and Coffee 2017-06-27 15:18 39人阅读 评论(0) 收藏
  19. win10家庭版安装DockerToolbox-18.03.0-ce
  20. C# 数组基础知识

热门文章

  1. 【Java】WrapperClass 包装类
  2. 快速搭建网站信息库(小型Zoomeye)
  3. Python生成一维码
  4. 《Spring In Action》阅读笔记之核心概念
  5. 关于赋值的Java面试题
  6. 反转链表-PHP的实现
  7. Win10桌面美化
  8. web--ajax--json
  9. PHP 使用try catch,捕获异常
  10. php原生函数应用