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的更多相关文章

  1. cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)

    B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  2. Codeforces Round #319 (Div. 2)B. Modulo Sum DP

                                                             B. Modulo Sum                               ...

  3. 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/ ...

  4. Modulo Sum(背包 + STL)

     Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  5. 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 ...

  6. codeforces 577B B. Modulo Sum(水题)

    题目链接: B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. Max Sum(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 Max Sum Time Limit: 2000/1000 MS (Java/Others)   ...

  8. HDOJ(HDU).1003 Max Sum (DP)

    HDOJ(HDU).1003 Max Sum (DP) 点我挑战题目 算法学习-–动态规划初探 题意分析 给出一段数字序列,求出最大连续子段和.典型的动态规划问题. 用数组a表示存储的数字序列,sum ...

  9. 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< ...

随机推荐

  1. java 中类为啥要序列化

    java里为什么要序列化?http://zhidao.baidu.com/link?url=7_wAQ8eAl28vcJPE5OKM5Y0Bo4aINNQokHhRmI9XPszEoTO5QF-gNb ...

  2. mysql创建存储过程及调用

    创建存储过程简单示例: DELIMITER //CREATE PROCEDURE ccgc()BEGINSELECT * FROM TEXT;SELECT * FROM s_user;END//DEL ...

  3. linux sysbench : CPU性能测试详解

    1.sysbench基础知识 sysbench的cpu测试是在指定时间内,循环进行素数计算 素数(也叫质数)就是从1开始的自然数中,无法被整除的数,比如2.3.5.7.11.13.17等.编程公式:对 ...

  4. Golang Web入门(3):如何优雅的设计中间件

    摘要 在上一篇文章中,我们已经可以实现一个性能较高,且支持RESTful风格的路由了.但是,在Web应用的开发中,我们还需要一些可以被扩展的功能. 因此,在设计框架的过程中,应该留出可以扩展的空间,比 ...

  5. 详解 Set接口

    (请关注 本人"集合"总集篇博文--<详解 Collection接口>) 在Collection接口的子接口中,最重要的,也是最常见的两个-- List接口 和 Set ...

  6. Java 网络编程 -- 基于TCP 实现聊天室 群聊 私聊

    分析: 聊天室需要多个客户端和一个服务端. 服务端负责转发消息. 客户端可以发送消息.接收消息. 消息分类: 群聊消息:发送除自己外所有人 私聊消息:只发送@的人 系统消息:根据情况分只发送个人和其他 ...

  7. 线程Event

    版本一: from threading import Event,current_thread,Thread import time event=Event() #造一个对象,内部维护一个全局变量,状 ...

  8. 4、flink自定义source、sink

    一.Source 代码地址:https://gitee.com/nltxwz_xxd/abc_bigdata 1.1.flink内置数据源 1.基于文件 env.readTextFile(" ...

  9. webpack4 图片加载

    图片处理(file-loader) 引用时出现的问题 在js中引入图片并添加到页面 let img = new Image(); img.src = './logo.png' document.bod ...

  10. opencv-3-图片存储与相对路径

    opencv-3-图片存储与相对路径 opencvqtC++ 在上一篇文章opencv 显示第一副图像 中, 我们完成了一副图像的显示, 包括使用VS,和QT 进行显示.. 本文将展示如何进行图像的显 ...