USACO Training 1.3.4 Prime Cryptarithm

#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
int a1[33] , a2[11];
int b[11];
int arr[11];
bool judge1(int x) {
	while (x) {
		if (!b[x % 10]) return 0;
		x /= 10;
	}
	return 1;
}
bool judge2(int x) {
	while (x) {
		if (!arr[x % 10]) return 0;
		x /= 10;
	}
	return 1;
}
int main() {
	int n , cnt = 0 ,tot=1 ,cnt1=0;
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		cin >> a1[i];
		a2[i] = a1[i];
		b[a1[i]] += 1;
		arr[i] = 1;
	}
	//cout << judge(26458) << endl;
	
	for (int i = 111; i <= 999; ++i) {
		if (!judge2(i)) continue;
		for (int j = 11; j <= 99; ++j) {
			if (!judge2(j)) continue;
			int x1 = 100 * a1[i/100] + 10 * a1[ (i/10)%10 ] + a1[i%10];
			int x2 = 10 * a1[j/10] + a1[j%10];
			//cout << x1 << " " << x2 << endl;
			int x3 = x1 * (x2 % 10);
			int x4 = x1 * (x2 / 10);
			int x5 = x1 * x2;
			//cout << x3 << " " << x4 << " " << x5 << endl << endl;
			if (x3 < 100 || x3>999) continue;
			if (!judge1(x3)) continue;
			if (x4 < 100 || x4>999) continue;
			if (!judge1(x4)) continue;
			if (x5 < 1000 || x5>9999) continue;
			if (!judge1(x5)) continue;
			cnt += 1;

		}
	}
	cout << cnt;
}

这是对于从n个数中取x(x<=n)个数,并且数字可以重复的一种思想。
dfs更可以

五种典型递推关系
1.Fibonacci 数列 Fn = Fn-1 + Fn-2
1.1 兔子繁殖
1.2 爬楼梯
2. Hanoi 塔问题 Hn = 2Hn-1 + 1
3. 平面分割问题 An = An-1 + 2(n-1)
4. Catalan 数
5. 第二类 Striling数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值