男科医院网站开发策划,团队拓展游戏项目大全,建设银行网上官方网站,企业网站建设制作题目描述
给你 #xfffd;n 根火柴棍#xff0c;你可以拼出多少个形如 #xfffd;#xfffd;#xfffd;ABC 的等式#xff1f;等式中的 #xfffd;A、#xfffd;B、#xfffd;C 是用火柴棍拼出的整数#xff08;若该数非零#xff0c;则最高位不能是 00n 根火柴棍你可以拼出多少个形如 ABC 的等式等式中的 A、B、C 是用火柴棍拼出的整数若该数非零则最高位不能是 00。用火柴棍拼数字 0∼90∼9 的拼法如图所示 注意
加号与等号各自需要两根火柴棍如果 ≠AB则 ABC 与 BAC 视为不同的等式,,≥0A,B,C≥0n 根火柴棍必须全部用上。
输入格式
一个整数 (1≤≤24)n(1≤n≤24)。
输出格式
一个整数能拼成的不同等式的数目。
输入输出样例
输入 #1复制
14
输出 #1复制
2
输入 #2复制
18
输出 #2复制
9
说明/提示
【输入输出样例 1 解释】
22 个等式为 011011 和 101101。
【输入输出样例 2 解释】
99 个等式为
044044、0111101111、1101111011、224224、279279、404404、729729、1011110111、1101111011。
noip2008 提高第二题
题解
因为这题给的火柴的数量其实不多我们可以尝试去枚举每一种情况。 最多24根火柴其中4根用来构建等于和加号20根火柴能构成的最大树我们先猜1000如果不够再往大了猜以免超时这个最大应该是711然后我们把3个位置的情况用dfs全部搜出来12位置为00的一条路走到黑有符合的就数量加1。 #includeiostream
#includecstring
#includecmath
#includealgorithm
#includestring
#includevector
#includemath.h
#includeiomanip
#includeset
#includequeue
#includestack
#includemap
#includelist
#include stdlib.h
#includedeque
using namespace std;
int n, a[10000], b[10] {6,2,5,5,4,5,6,3,7,6},ans,ch;
int fun(int x)//计算每个数要多少火柴摆出来
{int n0;if (x 0){return 6;}while (x 0){n n b[x % 10];x x / 10;}return n;
}
void dfs(int x)
{if (x 3){if (a[1] a[2] a[3]){if (fun(a[1]) fun(a[2]) fun(a[3]) n){if (a[1] a[2]){ch;}ans ans 1;}}return;}for (int i 0; i 712; i){a[x] i;dfs(x 1);a[x] a[x] - i;//还原上一步}
}
int main()
{cin n;n n - 4;dfs(1);cout ans-ch/2;
}