• codeforces 687C


    题意:一个数组a[i],你可以挑出若干个数(只能挑一次)加起来等于k,

            针对每一种方案,你可以选出这若干个数的子集来组合新数

            最后所有的方案能组合出多少种数

    分析:一看数据范围n,k<=500

             那就是显而易见就是母函数那套了

             从1到n,dp[i][j],代表通过前i个元素和为i,能否组合出j

    #include <cstdio>
    #include <iostream>
    #include <ctime>
    #include <vector>
    #include <cmath>
    #include <map>
    #include <set>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    typedef long long LL;
    const int N=1e5+5;
    const int INF=0x3f3f3f3f;
    const int mod=1e9+7;
    int a[N],n,p;
    int dp[505][505],tmp[505];
    vector<int>ret;
    int main(){
        scanf("%d%d",&n,&p);
        for(int i=1;i<=n;++i){
          scanf("%d",&a[i]);
        }
        sort(a+1,a+1+n);
        dp[0][0]=1;
        for(int i=1;i<=n;++i){
          for(int j=p;j>=a[i];--j){
            for(int k=0;k+a[i]<=p;++k)
            if(dp[j-a[i]][k])dp[j][k]=dp[j][k+a[i]]=1; 
          }
        }
        for(int i=0;i<=p;++i)
          if(dp[p][i])ret.push_back(i);
        printf("%d
    ",ret.size());
        for(int i=0;i<ret.size()-1;++i)
          printf("%d ",ret[i]);
        printf("%d
    ",ret[ret.size()-1]);
        return 0;
    }
    View Code
  • 相关阅读:
    go并发和并行
    goroutine
    go并发
    wampserver配置问题
    获取字符串的长度
    mysql中事件失效如何解决
    Go语言中Goroutine与线程的区别
    Mosquitto服务器的日志分析
    phpexcel导出数据 出现Formula Error的解决方案
    Centos6.X 手动升级gcc
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/5629572.html
Copyright © 2020-2023  润新知