• UVA 10036


    dp题目,

    dp[i][j]=1表示前i个数字形成的表达式的值除以K之后可以余j

     f[i][j]=1表示前i个数字形成的表达式的值除以K之后可以余j

    f[0][0]=1

    考虑第i个数字x,(先把x化为小于K的正数,便于后续操作)
    •如果 f[i-1][j] = 1,说明前i-1个数字的表达式的值除以K可以余j
    •在x的前面放“+”, f[i][(j+x)%K] = 1
    •在x的前面放“-”,f[i][(j-x+K)%K]=1

    #include <iostream>
    #include <string.h>
    using namespace std;
    int dp[10001][101];
    int a[10001];
    int main(){
        int m,n,k,u;
        while(cin>>m){
            while(m--){
                cin>>n>>k;
                for(int i=1;i<=n;i++){
                    cin>>u;
                    a[i]=(k+u%k)%k;        //把每个数字都化为正数,便于后续操作
                }
                memset(dp,0,sizeof(dp));
                dp[0][0]=1;
                for(int i=1;i<=n;i++){
                    for(int j=0;j<k;j++){
                        if(dp[i-1][j]){
                                dp[i][(j+a[i])%k]=1;
                                dp[i][(j-a[i]+k)%k]=1;
                        }
                    }
                }
                if(dp[n][0]==1)cout<<"Divisible"<<endl;
                else cout<<"Not divisible"<<endl;

            }
        }
        return 0;
    }

  • 相关阅读:
    zabbix
    amoeba 读写分离
    部署MySQL-主从异步复制
    MySQL 基本操作
    mysql 完整备份和恢复
    正则匹配表达式各个符文表达的意义
    Include和require的区别
    nosql和Mysql的区别
    Git与SVN的区别
    mongodb与mysql区别
  • 原文地址:https://www.cnblogs.com/Mr-Xu-JH/p/3856126.html
Copyright © 2020-2023  润新知