http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3321
回溯,dfs实现,注意要用long long, 9个100相乘最大数需要long long表示。
#include <iostream> #include <cstdio> using namespace std; long long a[20]; int n; int k; long long ans; const long long inf = 1000000000000000LL; long long myabs(long long nn){ return nn < 0 ? -nn : nn; } bool isOk(long long num){ if(num == 0 && k == 0) return false; num = myabs(num); while(num){ if(num % 10 == k) return false; num /= 10; } return true; } void dfs(long long res, int index){ if(index == n){ if(isOk(res)){ if(ans < res){ ans = res; } } return ; } dfs(res + a[index], index + 1); dfs(myabs(res - a[index]), index + 1); dfs(res * a[index], index + 1); if(a[index]){ dfs(res / a[index], index + 1); } } int main() { int t; scanf("%d", &t); while(t--){ ans = -inf; scanf("%d%d", &n, &k); for(int i = 0; i < n; i++){ scanf("%d", &a[i]); } dfs(a[0], 1); if(ans != -inf) printf("%lld/n", ans); else printf("No result/n"); } }