手链样式
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?
分析:
暴力加点技巧,以及string的运用
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int rem[3] = {3, 4, 5};
set<string> st;
int ans = 0;
void dfs(int num, string s)
{
if(num == 12)
{
for(set<string>::iterator it = st.begin(); it != st.end(); it++)
{
if((*it).find(s, 0) != string::npos)
return ;
}
ans++;
st.insert(s+s);
s = s + s;
reverse(s.begin(), s.end());
st.insert(s);
return ;
}
for(int i = 0; i <= 2; i++)
{
int t = rem[i];
if(t >= 1)
{
rem[i]--;
string tmp = s;
dfs(num+1, tmp.append(1, (char)(i+'0')));
rem[i]++;
}
}
}
int main()
{
dfs(0, "");
cout << ans << endl;
return 0;
}