zoukankan      html  css  js  c++  java
  • [TVYJ1096]数字组合

    时间: 1000ms / 空间: 131072KiB / Java类名: Main

    描述

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

    输入格式

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

    输出格式

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

    测试样例1

    输入

    4 4 
    1 1 2 2

    输出

    3

    思路

       DFS模板题

    var a:array[1..100] of longint;
        f:array[1..100] of boolean;
        n,i,j,sum,ans,m:longint;
    
    procedure dfs(x,y,z:longint);
    var i:longint;
    begin
        if z>m then exit;
        if z=m then
            begin
                inc(ans);
                exit;
            end;
        for i:=x to n do
            if not f[i] then
                begin
                    f[i]:=true;
                    dfs(i,y+1,z+a[i]);
                    f[i]:=false;
                end;
    end;
    
    begin
        fillchar(f,sizeof(f),false);
        readln(n,m);
        for i:=1 to n do read(a[i]);
        for i:=1 to n do
            begin
                f[i]:=true;
                dfs(i,1,a[i]);
                f[i]:=false;
            end;
        writeln(ans);
    end.
    View Code
  • 相关阅读:
    Linux dnsmasq.conf
    Linux 关闭网络管理服务
    Python Mysql_db对数据查询进行处理
    Python windows安装MYSQL_db
    Python 递归
    Nginx 系统维护配置
    ls 查看时间排序
    Nginx Linux yum安装
    Nginx 前后端分离配置 分发
    Spring boot 执行jar文件 方式
  • 原文地址:https://www.cnblogs.com/yangqingli/p/4919280.html
Copyright © 2011-2022 走看看