14015problem I 方案数

计时器游戏结束后,晨晨的同学明明取了其中的K个计时器设计出拼数字游戏:明明和晨晨各自把K个计时器排成一行,看谁拼出的数最大。例如:有K=3个计时器,上面数字分别是31,3,331,两人拼的方案分别是:

明明拼的数字是333131,晨晨拼的数字是331313,显然明明赢。
明明掌握了拼出最大值的核心算法,晨晨下决心也要研究。不过她首先要编程统计这K个计时器能拼出多少种不同的方案?
注意,现在的计时器更先进,可以显示4位数字。

输入
第一行:1个整数K。(1 ≤ K ≤ 4)
第二行K个整数:表示K个计时器上的数。(所有数均为大于0小于10000的整数)

输出
一个整数,表示拼成不同数的方案数。
样例输入 Copy
3
31 3 331
样例输出 Copy
5
解题思路

  1. 首先利用搜索与回溯的方法求出所有组合数。
  2. 减去重复的个数。
    附上代码
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
int n,a[100],b[100],c[100],v[100],k,len,t,x,i,ans;   //a数组放n个输入的值,b数组为搜索条件,0可搜,1不可搜//c数组是暂存a中的值, v数组用于记录去重的下标
long long d[100];
char s[100][100];
long long fun (long long x){  //判断位数 int t=0;do{t++;x=x/10;}while(x);return t;
}
void dfs(int x){    for(int i=1;i<=n;i++){            //搜索种类个数 if(x==n+1) { t=0;              //如果搜索的个数满足要求,将该次搜索的值放到d数组中 for(int i=1;i<=n;i++){ t+=fun(c[i]);         //计算的时候先确定每个数的位数 d[k]=d[k]+pow(10,len-t)*c[i];  } k++;    //记录有多少种组合 return;}else {if(b[i]==0){  //如果当前i没用 才可搜索 c[x]=a[i]; //暂存到c数组中方便计算每次的组合 b[i]=1;dfs(x+1); //搜索 b[i]=0; //回溯 }                                          }}
}
int main(){memset(b,0,sizeof(int));scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a[i]); //输入值 len+=fun(a[i]);   //计算n个数的总位数 }dfs(1);  //搜索 ans=k;   for(int i=0;i<k;i++){for(int j=0;j<k;j++)if(d[i]==d[j]&&i!=j&&v[j]==0&&v[i]==0){ans--;v[j]=1;}//每次找到一个相同的总组合数减1,并且v[j]=1 }printf("%lld",ans);return 0;
}

如果实在不理解搜索,可以尝试一下全排列,这题搜索思路与那题一致。

14015problem I 方案数相关推荐

  1. 背包问题 输出方案、输出字典序最小方案、可行方案数、最优方案总数

    原文地址:https://blog.csdn.net/ronaldo7_zyb/article/details/81069906 1. 要求输出方案: 以01背包为例 我们可以知到,01背包用一维数组 ...

  2. 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )

    文章目录 一.重复有序拆分 二.不重复有序拆分 1.无序拆分基本模型 2.全排列 三.重复有序拆分方案数证明 参考博客 : 按照顺序看 [组合数学]生成函数 简要介绍 ( 生成函数定义 | 牛顿二项式 ...

  3. Leetcode1712. 将数组分成三个子数组的方案数[C++题解]:双指针和前缀和

    文章目录 本题分析 题目链接 本题分析 题目重述: 给定一个非负的数组,要求将其分成3个非空的三段,要求每一段的数字之和依次递增(可以相等),求总共有几种分法. 题目解答: 双指针算法 思路:枚举第二 ...

  4. Party at Hali-Bula(树形DP+判断方案数是否唯一)

    Party at Hali-Bula UVA - 1220 题意:  公司里有n(n<=200)个人形成一个树状结构, 要求尽量选多的人,但不能同时选择一个人和他的直属上司,文最多能选多少人,以 ...

  5. 【NOIP模拟】T2 管道(状压dp求图的dfs序方案数)

    f[i][j]: i表示整个图走没走过的状态 j表示当前到了第j个点 存的值就是在这种情形下 可以走到的地方的状态 dp[i][j]:i表示整个图走没走过的状态 j表示当前在j点 访问剩余能去到的点的 ...

  6. 【数据结构与算法】之给Nx3网格图涂色的方案数的求解算法

    一.题目要求 你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同). 给你网格图的行数 ...

  7. 2025. 分割数组的最多方案数

    2025. 分割数组的最多方案数 给你一个下标从 0 开始且长度为 n 的整数数组 nums .分割 数组 nums 的方案数定义为符合以下两个条件的 pivot 数目: 1 <= pivot ...

  8. HDU 1284 钱币兑换问题 (动态规划 背包方案数)

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. LeetCode 6061. 买钢笔和铅笔的方案数

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 total ,表示你拥有的总钱数.同时给你两个整数 cost1 和 cost2 ,分别表示一支钢笔和一支铅笔的价格. 你可以花费你部分或者全 ...

最新文章

  1. cortex M内核优先级设置
  2. oracle数据block默认是,oracleBLOCK(数据块)
  3. uniapp连接php,thinkphp5 对接手机uni-app的unipush推送(个推)
  4. api-gateway实践(03)新服务网关 - 网关请求拦截检查
  5. 智慧交通day03-车道线检测实现09:车道线检测代码汇总(Python3.8)
  6. 如何使用facenet详解_松下电吹风如何使用 松下电吹风使用方法及维护【详解】...
  7. 访问者(Visitor Pattern )模式
  8. MySQL(一)面试集合
  9. Win7版IE10下载包中暗藏了DirectX 11.1
  10. [UPF]理解UPF功率域和域边界
  11. 20张动图全析四大显微分析(SEM、TEM、AFM、STM)工作原理!
  12. ET vs Ad hoc
  13. WebGL three.js 3D 场景
  14. P2973 [USACO10HOL]赶小猪
  15. Ubuntu重装NVIDIA显卡驱动
  16. QPBOC快速借贷记流程(2)
  17. pytorch进行图像识别_pytorch使用4种不同的模型进行面部表情识别
  18. 探索 Zynq MPSoC:配套 PYNQ 和机器学习应用一起使用 - 序言鸣谢目录20211231
  19. 全网通工业级3G/4G无线路由器
  20. Affine geometry

热门文章

  1. 【硬件和驱动相关】wifi设备没有工作 ubuntu18.0.4 无线网卡 intel 6 AX200
  2. 前IBM和Cisco执行官Tom Noonan将加入Bakkt担任董事会主席
  3. android 流星动画,超简单的android 流星雨动画 流星动画
  4. harbor 下载地址(国内代理)
  5. 股市知识:ST的股票可以买吗
  6. Excel做数据海报
  7. 将小图标转换成字体图标代码
  8. seaborn直方图、散点图与回归分析图的绘制
  9. 北大AI公开课第五课--深度学习处理器by寒武纪陈云霁
  10. 心肝火旺是夏季宝宝晚上睡不踏实的主要原因