UVa:140 Bandwidth
2014-01-15 14:39
260 查看
这都是之前第七章留下来的水题。
枚举全排列。然后挨个求就可以了。
枚举全排列。然后挨个求就可以了。
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <vector> #include <cmath> #include <string> #include <algorithm> #define MAXN 30 #define MOD 1000000007 #define INF 2139062143 #define ll long long using namespace std; int main() { std::ios::sync_with_stdio(false); string str; while(getline(cin,str)&&str!="#") { bool note=true; int now,tar; vector<int> gl[MAXN]; for(int i=0; i<str.size(); ++i) { if(isalpha(str[i])) { if(note) now=str[i]-'A'; else { tar=str[i]-'A'; gl[now].push_back(tar); } } if(str[i]==';') note=true; else if(str[i]==':') note=false; } string arr; for(int i=0; i<str.size(); ++i) if(isalpha(str[i])&&find(arr.begin(),arr.end(),str[i])==arr.end()) arr+=str[i]; int minn=INF; string ans; sort(arr.begin(),arr.end()); do { int res=0; for(int i=0; i<arr.size(); ++i) { int num=arr[i]-'A'; for(int j=0; j<gl[num].size(); ++j) { for(int k=0; k<arr.size(); ++k) if(arr[k]==gl[num][j]+'A') { int L=abs(i-k); res=max(res,L); break; } } } if(res<minn) { minn=res; ans=arr; } } while(next_permutation(arr.begin(),arr.end())); for(int i=0; i<ans.size(); ++i) if(!i) cout<<ans[i]; else cout<<" "<<ans[i]; cout<<" -> "<<minn<<endl; } return 0; }
相关文章推荐
- UVA - 140 Bandwidth
- Uva 140 Bandwidth(回溯法+剪枝)
- UVa 140 - BandWidth 解题报告(暴力)
- Uva 140 - Bandwidth
- UVA 140 带宽 Bandwidth (暴力枚举+剪枝)
- UVa 140 - Bandwidth
- UVA 140 Bandwidth
- UVa 140 Bandwidth
- uva 140 Bandwidth(暴搜+剪枝)
- uva - 140 - Bandwidth(模拟 + 下一个排列 + 图)
- UVA 140 Bandwidth
- Bandwidth UVA - 140(next_premutation)
- UVa 140 - Bandwidth
- uva 140 Bandwidth
- UVA 140 Bandwidth (带宽)
- UVA 140_Bandwidth
- UVa 140 Bandwidth(DFS 回溯 剪枝)
- UVa140- Bandwidth
- uva140 - Bandwidth
- [暴力搜索]Bandwidth UVA140