题意:给一个数字n(n<=12000000)和一个字符串s(s<=17),字符串的全是有大写字母组成,字母的大小按照字母表的顺序,比如(A=1,B=2,......Z=26),从该字符串中选出5个字母,使得满足一下条件

v - w^2 + x^3 - y^4 + z^5 = n;

满足条件的可能有多组,请输出字典序最大的一组;

问题 :首先怎么找到满足条件的一组,一组字符串,对于每一个字符我们有两种选择 选||不选 ,然后在对每一个字符去进行这样的判断,然后把我们选好的5个字母在判断是否满足条件,但是这是你又会发现另外一个问题,就是它的解可能不是按照的字符串的顺序,这是我们就要想另外一种方法了,用一个vis[]数组标记每个字母,在用dfs去搜

其次是怎么输出字典序最大的呢,先对字符串进行排序,以从大到小排序,在找的过程中只要找到符合条件的一组就return;

AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 25;
int vis[maxn], n, a[maxn],b[maxn], k;
char ch[maxn], d[maxn];
bool flag; bool cmp(char p, char q) {
return p > q;
}
//v - w^2 + x^3 - y^4 + z^5 = target
void check() {
if (n == b[0] - b[1] * b[1] + b[2] * b[2] * b[2] - b[3] * b[3] * b[3] * b[3] + b[4] * b[4] * b[4] * b[4] * b[4]) {
flag = true;
}
return;
} void dfs(int num) {
if (flag) return;
if (num == 5) {
check();
return;
}
for (int i = 0; i < k; i++) {
if (!vis[i] && !flag) {
vis[i] = 1;
b[num] = a[i];
dfs(num + 1);
vis[i] = 0;
}
}
} int main() {
while (cin >> n >> ch && n && ch != "END") {
memset(vis, 0, sizeof(vis));
k = strlen(ch);
sort(ch, ch + k, cmp);
for (int i = 0; i < k; i++) {
a[i] = ch[i] - 'A' + 1;
}
flag = false;
dfs(0);
if (flag) {
for (int i = 0; i < 5; i++) {
d[i] = b[i] - 1 + 'A';
printf("%c", d[i]);
}
cout << endl;
}
else cout << "no solution" << endl;
}
}

最新文章

  1. PAT 1050. 螺旋矩阵(25)
  2. gulp 安装 使用 和删除
  3. sql 多行转换为一行
  4. oracle增量备份
  5. 【iCore3 双核心板_FPGA】例程十三:FSMC总线通信实验——复用地址模式
  6. 【数位DP】bzoj1026: [SCOI2009]windy数
  7. Sql server 浅谈用户定义表类型
  8. mysql 更新 语句中 的 safe_mode
  9. [置顶] Objective-C ,/,ios,/iphone开发基础:协议(protocol)
  10. fpga该驱动器调试dev_dbg 无输出
  11. 【IE6的疯狂之八】链接伪类(:hover)CSS背景图片有闪动BUG
  12. Java设计模式:代理模式(二)
  13. SSL Certificate Signed Using Weak Hashing Algorithm 和SSL Medium Strength Cipher Suites Supported的解决方案
  14. 18.Class 的基本语法
  15. Sql Server 按格式输出日期
  16. IT项目管理——《人月神话》读后感
  17. EBS获取code_combination_id(CCID)时段值自动被置为默认值的问题
  18. 2017-12-26 Java关键字的汉化用词探讨
  19. centos7 apache设置伪静态 开启rewrite_module
  20. JS之滚动条效果

热门文章

  1. python_0基础学习_day02
  2. Mysql无法启动情况下,如何恢复数据?
  3. java文字转语音播报功能的实现方法
  4. springboot-jsp打jar问题
  5. Unity的赛车游戏实现思路
  6. java swing 开发 -JTable
  7. 安装Windows Server 2008
  8. Python 获取服务器的CPU个数
  9. 登录cookies
  10. Zabbix添加windows主机监控