poj 1745 Divisibility

简介: 点击打开链接poj 1745 思路: dp 分析: 1 又是一道看了题解还不懂怎么个回事的题,然后各种YY之后有点感觉 2 题目要求的是在n个数中间插入n-1个的+或-使得结果能否被k整除 3 看一个数学的公式(a+b)%k = a%k...

点击打开链接poj 1745

思路: dp

分析:
1 又是一道看了题解还不懂怎么个回事的题,然后各种YY之后有点感觉
2 题目要求的是在n个数中间插入n-1个的+或-使得结果能否被k整除
3 看一个数学的公式(a+b)%k = a%k+b%k,按照网上的题解dp[i][j]表示的是前i个数运算能否得到模为j,如果可以则dp[i][j] = true,否则为false
4 那么如果dp[i-1][j] = true,则可以知道dp[i][(j+arr[i])%k]] = true , dp[i][(j-arr[i])%k]] = true。怎么理解这个状态转移方程呢,因为对于arr[i]这个数我们可以加也可以减,所以说有两种的情况
5 由于题目要求的是模,所以我们只要把所有的负数全部搞成正数即可。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MAX = 110;
const int MAXN = 10010;

int n , k;
bool dp[MAXN][MAX];

int main(){
    int num;
    while(scanf("%d%d" , &n , &k) != EOF){
         memset(dp , false , sizeof(dp));
         scanf("%d" , &num);
         dp[0][abs(num)%k] = true;
         for(int i = 1 ; i < n ; i++){
             scanf("%d" , &num);
             num = abs(num)%k;
             for(int j = 0 ; j < k ; j++){
                 if(dp[(i-1)%2][j]){
                    dp[i%2][(j+num)%k] = true;
                    dp[i%2][(j-num+k)%k] = true; 
                 } 
             } 
         }
         if(dp[(n-1)%2][0])
             puts("Divisible");
         else
             puts("Not divisible");
    }
    return 0;
}




目录
相关文章
【408计算机组成原理】—移位运算(七)
【408计算机组成原理】—移位运算(七)
|
9月前
|
存储 监控 算法
基于YOLOv5和树莓派4B平台
目标检测在计算机视觉领域中具有重要意义。YOLOv5(You Only Look One-level)是目标检测算法中的一种代表性方法,以其高效性和准确性备受关注,并且在各种目标检测任务中都表现出卓越的性能。本文将详细介绍如何在性能更强的计算机上训练YOLOv5模型,并将训练好的模型部署到树莓派4B上,通过树莓派的摄像头进行实时动物目标检测。 一、在电脑上训练YOLOv5模型 1. 安装Anaconda 在性能更强的计算机上安装Anaconda,方便管理Python环境和依赖。 从Anaconda官网(https://www.anaconda.com/products/distribu
510 6
|
Docker 容器
docker: 修改运行容器的端口
docker: 修改运行容器的端口
|
搜索推荐 Java API
Electron V8排查问题之分析 node-memwatch 提供的堆内存差异信息来定位内存泄漏对象如何解决
Electron V8排查问题之分析 node-memwatch 提供的堆内存差异信息来定位内存泄漏对象如何解决
280 0
|
容器
C++17新特性之try_emplace与insert_or_assign
由于std::map中,元素的key是唯一的,我们经常遇到这样的场景,向map中插入元素时,先检测map指定的key是否存在,不存在时才做插入操作,如果存在,直接取出来使用,或者key不存在时,做插入操作,存在时做更新操作。
259 0
|
11月前
|
编译器 C++
使用Visual Studio 2022 创建lib和dll并使用
本文介绍了如何在Visual Studio 2022中创建静态库(lib)和动态库(dll),并展示了如何使用这些库。文章详细说明了创建新项目、编写代码、生成库文件、配置项目属性以及编写测试代码的步骤,并提供了相应的截图和代码示例。作者还分享了在创建和使用库的过程中遇到的一些问题及其解决方案。
2428 0
使用Visual Studio 2022 创建lib和dll并使用
|
关系型数据库 MySQL 数据库
MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)
MySQL 启动日志报错: File /mysql-bin.index not found (Errcode: 13 - Permission denied)
838 2
|
存储 安全 算法
【C++ 包装器类 std::atomic 】全面入门指南:深入理解并掌握C++ std::atomic 原子操作 的实用技巧与应用
【C++ 包装器类 std::atomic 】全面入门指南:深入理解并掌握C++ std::atomic 原子操作 的实用技巧与应用
1229 1
|
XML Android开发 数据格式
Android Studio App开发实战项目之实现淘宝电商App首页界面(附源码,可用于大作业参考)
Android Studio App开发实战项目之实现淘宝电商App首页界面(附源码,可用于大作业参考)
1517 1
Python文件读取方法:read()、readline()和readlines()的区别
Python文件读取方法:read()、readline()和readlines()的区别