标签:
题意:给定长度5-12的字符串,然后给定一个目标值,问字符串是否存在长度为5并且满足式子 v - w^2 + x^3 - y^4 + z^5 = target 的子串,有就输出,没有就输出no solution,如果有多种情况,输出字典序最大的那个。
1 /* 简单DFS 2 * 题意就是给你一个值和一个字符串,然 后从字符串里选取5个字符,带入 3 * 方程, 求出字典序最大的解 4 */ 5 6 #include <stdio.h> 7 #include <string.h> 8 #include <stdlib.h> 9 #include <algorithm> 10 11 char ch[100]; 12 int visit[1000]; 13 int flag, len, N; 14 char str[150]; 15 16 using namespace std; 17 18 19 void DFS( int n, int sum) 20 { 21 int j, t; 22 23 if (flag) 24 return; 25 26 if ( sum == N && n == 5) { 27 puts(ch); 28 flag = 1; 29 return ; 30 } 31 else { 32 for(j = len - 1; j >= 0; j--){ 33 if ( !visit[j] ) { 34 visit[j] = 1; 35 t = str[j] - ‘A‘ + 1; 36 if (n == 0) { 37 ch[n] = str[j]; 38 DFS(n + 1, sum + t); 39 } 40 else if ( n == 1) { 41 ch[n] = str[j]; 42 DFS(n + 1, sum - t * t); 43 } 44 else if ( n == 2) { 45 ch[n] = str[j]; 46 DFS( n + 1,sum + t * t * t); 47 } 48 else if ( n == 3) { 49 ch[n] = str[j]; 50 DFS (n + 1,sum - t * t * t * t) ; 51 } 52 else if ( n == 4) { 53 ch[n] = str[j]; 54 DFS (n + 1,sum + t * t * t * t * t); 55 } 56 visit[j] = 0; 57 } 58 } 59 } 60 } 61 62 63 64 65 66 67 68 int main( ) 69 { 70 int i, j, cnt; 71 72 while(scanf("%d%s", &N, str) != EOF) { 73 if (N == 0 && strcmp(str, "END") == 0) 74 break; 75 memset(visit, 0, sizeof(visit)); 76 len = strlen(str), flag = 0; 77 sort(str, str + len); //先对字符串进行排序 78 //puts(str); 79 DFS(0, 0); 80 if ( !flag) 81 puts("no solution"); 82 } 83 return 0; 84 }
标签:
原文地址:http://www.cnblogs.com/to-creat/p/5002939.html