• I


    题目大意


    给你n个数,让你用这n个数在组成k的情况下,找到所有的value,这些value也由这n个数组成,且这些value组合在一起能够组成k


    解法


    看到题目我的想法就是母函数= =不过wa了,后来发现因为母函数能找到这n个数所能形成的所有情况,但是可能两种情况是包含关系的。比如3,3,6这个数据可以形成6和9但是如果k是15的时候,你就不能得到因为9是由6生成的
    dp[i][j]表示在和为i的情况下,能否得到j
    那么当dp[i][j] = 1时,dp[i][j + c[k]]比然能得到,dp[i+c[k]][j+c[k]]也能得到。


    C++代码

    /**
    6 18
    5 6 1 10 12 2
    dp[i-c[i]][k] -> dp[i][k],dp[i][k+c[i]]
    */
    
    #include<bits/stdc++.h>
    using namespace std;
    
    int a[555];
    int res[1000000];
    int dp[555][555];
    int main(){
        int n , m ;
        cin >> n >> m;
        for(int i = 1; i <= n ; i++){
            cin >> a[i];
        }
        sort(a+1,a+1+n);
        dp[0][0] = 1;
        for(int i = 1;i <= n ; i++){
            for(int j = m;j >= a[i];j --){
                for(int k = 0;k + a[i]<= m;k ++){
                    if(dp[j - a[i]][k]) dp[j][k] = dp[j][k+a[i]] = 1;
                }
            }
        }
        int tot = 0;
        for(int i = 0;i <= m; i ++) if(dp[m][i]) res[tot++] = i; 
        printf("%d
    ",tot);
        for(int i = 0;i < tot;i ++) printf("%d ",res[i]);
    }
     
  • 相关阅读:
    第三章 kubernetes核心原理
    Jmeter
    Docker 入门学习
    第二章 Kuberbetes实践指南
    第一章 Kubernetes入门
    java中的引用与ThreadLocal
    Disruptor极速队列
    Redis设计与实现——单机数据库的实现
    Redis设计与实现——数据结构与对象
    python装饰器
  • 原文地址:https://www.cnblogs.com/DWVictor/p/11219002.html
Copyright © 2020-2023  润新知