[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.

时间: 2024-10-25 12:47:07

[TVYJ1096]数字组合的相关文章

tyvj1096 数字组合

描述 在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 输出

JS生成随机的由字母数字组合的字符串

前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法 1 Math.random().toString(36).substr(2); 输出结果 解释 很有意思,研究了一下,基本上toString后的参数规定可以是2-36之间的任意整数,不写的话默认是10(也就是十进制),此时返回的值就是那个随机数. 若是偶数,返回的数值字符串都是短的,若是奇数,则返回的将是一个很大长度的表示值. 若<10 则都是数字组成,>10 才会包含字

JAVAWEB项目实现验证码中文、英文、数字组合

验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码.刷票.论坛灌水.有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录. 二.图文验证码的原理 :在servlet中随机生成一个指定位置的验证码,一般为四位,然后把该验证码保存到session中.在通过Java的绘图类以图片的形式输出该验证码.为了增加验证码的安全级别,可

工具类:获得随机字母和数字的组合(字母+数字组合,字母组合,数字组合)

package util; import java.util.Random; /** * * @author jkfeng * 获得随机字母和数字的组合(字母+数字组合,字母组合,数字组合) * */ public class RandomCharOrNumUtil { public static void main(String[] args) { System.out.println(getCharAndNum(6)); System.out.println(getChar(6)); Sys

背包问题 codevs2210 数字组合

数字组合 题目描述 Description 在N个数中找出其和为M的若干个数.先读入正整数N和M, 再读入N个正数(可以有相同的数字,每个数字均在1000以内), 在这N个数中找出若干个数, 使它们的和是M, 把满足条件的数字组合都找出来以统计组合的个数,输出组合的个数(不考虑组合是否相同).要求你的程序运行时间不超过1秒. 输入描述 Input Description 第一行是两个数字,表示N和M.第二行起是N个数. 输出描述 Output Description 就一个数字,表示和为M的组合

#DP# ----- 数字组合

OpenJudge 2985:数字组合 总时间限制:1000ms  内存限制: 65536kB 描述 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如:n=5,5个数分别为1,2,3,4,5,t=5:那么可能的组合有5=1+4和5=2+3和5=5三种组合方式. 输入 输入的第一行是两个正整数n和t,用空格隔开,其中1<=n<=20,表示正整数的个数,t为要求的和(1<=t<=1000)接下来的一行是n个正整数,用空格隔开. 输出 和为t的不同的组合方式的数目. 样例

2985:数字组合

2985:数字组合 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如: n=5,5个数分别为1,2,3,4,5,t=5: 那么可能的组合有5=1+4和5=2+3和5=5三种组合方式. 输入 输入的第一行是两个正整数n和t,用空格隔开,其中1<=n<=20,表示正整数的个数,t为要求的和(1<=t<=1000) 接下来的一行是n个正整数,用空格隔开. 输出 和为t的不同的组合方式的数

生成随机字母数字组合

//生成随机字母数字组合 public static string CreateRandom(int codeCount) { string allChar = "2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,m,n,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z"; string[] allCharArray = allChar.Split(','); strin

OpenJudge 2985数字组合 解析报告/DP

2985:数字组合 总时间限制:  1000ms 内存限制:  65536kB 描述 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如:n=5,5个数分别为1,2,3,4,5,t=5:那么可能的组合有5=1+4和5=2+3和5=5三种组合方式. 输入 输入的第一行是两个正整数n和t,用空格隔开,其中1<=n<=20,表示正整数的个数,t为要求的和(1<=t<=1000)接下来的一行是n个正整数,用空格隔开. 输出 和为t的不同的组合方式的数目. 样例输入 5 5 1