HDU 1521 排列组合 搜索

排列组合

Problem Description

有n种物品,并且知道每种物品的数量。要求从中选出m件物品的排列数。例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种。

Input

每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10),表示物品数,第二行有n个数,分别表示这n件物品的数量。

Output

对应每组数据输出排列数。(任何运算不会超出2^31的范围)

Sample Input

2 2
1 1

Sample Output

2

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,m,s,a[11];
void dfs(int x){
    if(x==0){
        s++;return;
    }
    for(int i=0;i<n;++i){
        if(a[i]){
            a[i]--;
            dfs(x-1);
            a[i]++;
        }
    }
}
int main(){
    while(cin>>n>>m)
    {
        s=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        dfs(m);
        cout<<s<<endl;
    }
    return 0;
}

dfs  如果只要求找到解,不需要回溯

如果需要找出所有解则需要

原文地址:https://www.cnblogs.com/m2364532/p/12331210.html

时间: 2024-10-09 02:51:41

HDU 1521 排列组合 搜索的相关文章

hdu 1521 排列组合 —— 指数型生成函数

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1521 标准的指数型生成函数: WA了好几遍,原来是多组数据啊囧: 注意精度,直接强制转换(int)是舍去小数,会WA,+0.5再强制转换或输出 %.0lf 是四舍五入,能A. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace

HDU 1521 排列组合 指数型母函数

指数型生成函数公式(其中一个): #include<iostream> #include<string.h> #include<stdio.h> using namespace std; #define M 15 double fac[M]; void fun()//求n的阶乘 函数 { int i; fac[0]=1; for(i=1;i<=10;i++) fac[i]=i*fac[i-1]; } int main() { int n,m; int z[M];

HDU 1521 排列组合

Problem Description 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB","BA"两种. Input 每组输入数据有两行,第一行是二个数n,m(1<=m,n<=10),表示物品数,第二行有n个数,分别表示这n件物品的数量. Output 对应每组数据输出排列数.(任何运算不会超出2^31的范围) Sample Input 2 2 1 1 Sample

hdu 5366 排列组合

http://acm.hdu.edu.cn/showproblem.php?pid=5366 Problem Description ![](../../data/images/C613-1001-1.jpg) ZJiaQ want to become a strong man, so he decided to play the mook jong.ZJiaQ want to put some mook jongs in his backyard. His backyard consist o

hdu 4535(排列组合之错排公式)

吉哥系列故事——礼尚往来 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1417    Accepted Submission(s): 733 Problem Description 吉哥还是那个吉哥 那个江湖人称“叽叽哥”的基哥 每当节日来临,女友众多的叽叽哥总是能从全国各地的女友那里收到各种礼物. 有礼物收到当然值得高兴,但回礼确是

hdu 1261 排列组合&amp;&amp;大数除法

唉  不知道第一次发什么神经 第一次把t定义成char 型的了 小数还对 大数就不多了...找了半个小时才找到  以后要细心了 求大数 一定是用字符串保存,,long long 肯定溢出. 具体思路就是把所有字符个数加起来的阶乘n!除以各个字符出现的个数的阶乘. #include <stdio.h> #include <string.h> #define num 1000 int main() { char str[num]; long long n,x,count,j,i,q,s

排列组合 HDU - 1521 -指数型母函数

排列组合 HDU - 1521 一句话区分指数型母函数和母函数就是 母函数是组合数,指数型母函数是排列数 #include<bits/stdc++.h> using namespace std; #define maxn 12 double ans[maxn],tp[maxn],inv[maxn]; int n,m,a[maxn]; void init() { inv[0]=1; for(int i=1; i<=11; i++) inv[i]=inv[i-1]*i; } int main

排列组合+组合数取模 HDU 5894

1 // 排列组合+组合数取模 HDU 5894 2 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 3 // 思路: 4 // 定好m个人 相邻人之间k个座位 剩下就剩n-(m+1)*k个座位 5 // 剩下座位去插m个不同的盒子==就等价n个相同的球放m个不同的盒子 6 // 然后组合数出来了 7 // 乘n的话是枚举座位,除m是去掉枚举第一个座位的时候,剩下人相邻的座位相对不变的情况 8 9 #include <iostream> 10 #incl

Day4:T3搜索 T4数学题排列组合

T3:搜索 很出名的题吧,费解的开关 同T2一样也是一题很考思考的 附上题解再解释吧: 对于每个状态,算法只需要枚举第一行改变哪些灯的状态,只要第一行的状态固定了,接下来的状态改变方法都是唯一的:每一行需要改变状态的位置都在上一行中不亮的灯的正下面,因为只有这样才能使上一行的灯全亮.我们枚举第一行的状态改变方法(共2^5种),对于每种方法都依次改变下面几行的状态使上面一行灯全亮.到最后一行我们需要判断是否最后一行也恰好全亮,并更新最小步数. 首先需要找到第一行的状态,怎么写?枚举深搜啊 找到了其