• P1096(简单dp)


    题目描述

    在N个数中找出其和为M的若干个数。先读入正整数N(1< N< 100)和M(1< M< 10000),  再读入N个正数(可以有相同的数字,每个数字均在1000以内),  在这N个数中找出若干个数,  使它们的和是M,  把满足条件的数字组合都找出来以统计组合的个数,输出组合的个数(不考虑组合是否相同)。要求你的程序运行时间不超过1秒。

    输入

    第一行是两个数字,表示N和M。 第二行起是N个数。

    输出

    就一个数字,表示和为M的组合的个数。

    样例输入

    4 4
    1 1 2 2
    

    样例输出

    3
    

    提示

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    int a[105];
    int dp[10005];
    int main(){
        int n,m;
        cin>>n>>m;
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        sort(a+1,a+n+1);
        dp[0]=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=m;j>=a[i];j--)
            {
                if(dp[j-a[i]])
                    dp[j]+=dp[j-a[i]];
            }
        }
        cout<<dp[m]<<endl;
        return 0;
    }
  • 相关阅读:
    windows下安装mysql教程
    git基本操作
    JDK8,Optional
    重新安装MySQL 8出现的问题
    HTML5学习:缩略图
    HTML5学习:表格
    MySQL常用命令
    Django学习:创建admin后台管理站点
    Django学习:连接Mysql数据库
    Django学习:创建第一个app
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/10494074.html
Copyright © 2020-2023  润新知