#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
using namespace std;
class ABC{
public:
int num[40];
bool isA[40];
string createString(int n, int k){
int n1=0,n2=0,n3=0,nt=-1;
for(int i1=0;i1<n;i1++){
for(int i2=0;i2<n;i2++){
for(int i3=0;i3<n;i3++){
if(i1+i2+i3==n){
if(i1*i2+i1*i3+i2*i3>nt){
nt=i1*i2+i1*i3+i2*i3;
n1=i1,n2=i2,n3=i3;
}
}
}
}
}
if(k>nt) return "";//判断无解
//先往“AAA..”中插入'B'
string s; s.clear();
memset(num,0,sizeof(num));
nt=n2;
while(k && nt){
int kt=min(n1,k);
num[kt]+=1;
k-=kt;
nt-=1;
}
for(int i=0;i<nt;i++){
s+="B";
}
for(int i=1;i<=n1;i++){
s+="A";
while(num[i]--){
s+="B";
}
}
for(int i=0;i<n1+n2;i++){
isA[i]=s[i]=='A'?true:false;
}
//再插入'C'
memset(num,0,sizeof(num));
nt=n3;
while(k && nt){
int kt=min(n1+n2,k);
num[kt]+=1;
k-=kt;
nt-=1;
}
s.clear();
for(int i=0;i<nt;i++){
s+="C";
}
for(int i=1;i<=n1+n2;i++){
s+=isA[i-1]?"A":"B";
while(num[i]--){
s+="C";
}
}
return s;
}
};
原文地址:http://blog.csdn.net/uestc_peterpan/article/details/43422703