zoukankan      html  css  js  c++  java
  • POJ 1745 Divisibility【DP】

    题意:给出n,k,n个数,在这n个数之间任意放置+,-号,称得到的等式的值能够整除k则为可划分的,否则为不可划分的。

    自己想的是枚举,将所有得到的等式的和算出来,再判断它是否能够整除k,可是有10000个数-_-

    5555---还是看的题解--

    话说这样的状态好奇妙啊啊啊---

    用dp[i][j]表示等式中有i个数的时候余数为j是否成立,成立的话dp[i][j]的值为1,否则为0

    然后就是递推的过程, 如果dp[i-1][j]为1,那么dp[i][(j-a[i])%k]=1,dp[i][(j+a[i])%k]=1; 最后再判断dp[n][0]是否为1

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 using namespace std;
     6 
     7 int dp[10005][105],a[10005],n,k;
     8 
     9 int getmod(int x)
    10 {
    11     if(x<0) return (-x)%k;
    12     return x%k;
    13 }
    14 
    15 int main()
    16 {
    17     int i,j;
    18     while(scanf("%d %d",&n,&k)!=EOF)
    19     {
    20         for(i=1;i<=n;i++) scanf("%d",&a[i]);
    21         dp[1][getmod(a[1])]=1;
    22         
    23         for(i=2;i<=n;i++)
    24         {
    25             for(j=0;j<k;j++)
    26             {
    27                 if(dp[i-1][j]) dp[i][getmod(j-a[i])]=dp[i][getmod(j+a[i])]=1;
    28             }
    29         }
    30         if(dp[n][0]) printf("Divisible
    ");
    31         else printf("Not divisible
    ");        
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    机器学习的定义和分类
    选股
    mysql修改密码
    快速排序
    php的错误类型
    MySQL数据库优化
    库存超卖问题
    循环处理
    kafka安装配置
    JavaScript、jQuery杂记
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4297520.html
Copyright © 2011-2022 走看看