uva 140 带宽暴力减枝
来源:互联网 发布:java读取nc文件源代码 编辑:程序博客网 时间:2024/04/29 12:45
这个题做的时候很头疼啊,想了好久不太好做,减枝的技巧很多,自己也不太会用,学习的其他大佬的方法,还有待提高,减枝减不好,很容易错过最优解。所以需要注意一下
也是学习了一波这个题很值得思考和考虑的题
#include <iostream>#include <cstdio>#include <cstring>#include <iomanip>using namespace std;const int maxn = 100 + 10;char s[maxn];int graph[30][30];int vis[30];int ans,number;int rgb[10];void dfs(int deep,int tmp[]){ if(deep == number) { int max1 = 0; for(int i = 0; i < number; i++) { for(int j = i + 1; j < number; j++) { if(graph[tmp[i]][tmp[j]]) { max1 = max(max1,j - i); } } } if(ans > max1) { ans = max1; for(int i = 0; i < number; i++) { rgb[i] = tmp[i]; } } return; } for(int i = 0; i < 26 ; i++) { if(vis[i]) { int ok = 1; for(int j = 0; j < deep; j++)//这里是进行一步判断是否要减枝,很关键的一步否则会超时 { if(graph[i][tmp[j]]) { //cout<<deep - j<<"**" <<endl; if(deep - j > ans) { ok = 0; break; } } } if(ok) { tmp[deep] = i; vis[i] = 0; dfs(deep + 1,tmp); vis[i] = 1; } } } return;}int main(){ while(scanf("%s",s)!= EOF && s[0] != '#') { int i = 0; memset(graph,0,sizeof(graph)); memset(vis,0,sizeof(vis)); while(s[i] != '\0') { if(s[i] == ':') { int ss = s[i - 1] - 'A'; vis[ss] = 1; i++; while(s[i] != ';' && s[i] != '\0')//这个题对于题目的输出处理也有一点难度,用一个无向图的方法去存 { graph[ss][s[i] - 'A'] = 1; graph[s[i] - 'A'][ss] = 1; vis[s[i] - 'A'] = 1; i++; } } else i++; } number = 0; for(i = 0; i < 26; i++) { if(vis[i]) number++; } ans = 999999; int tmp[10]; dfs(0,tmp); for(int i=0; i<number; i++) printf("%c ",rgb[i]+'A'); printf("-> %d\n",ans); } return 0;}
阅读全文
1 0
- uva 140 带宽暴力减枝
- UVA 140 带宽 Bandwidth (暴力枚举+剪枝)
- uva 140 带宽
- uva 140 Bandwidth 带宽
- UVa 140 带宽
- 带宽(Bandwidth,UVa 140)
- UVA 140 Bandwidth (带宽)
- 140UVa带宽
- 带宽(Bandwidth,UVa 140
- UVA 140 带宽
- UVa 140 带宽 Bandwidth
- UVA-140 Bandwidth 带宽
- 例题 7-6 UVA - 140 Bandwidth 带宽 (全排列暴力)
- UVA-140 最小带宽 以后再补吧
- UVa 140 - BandWidth (暴力)
- UVA 140 Bandwidth 暴力模拟
- UVa 140:Bandwidth(暴力)
- UVA 140 全排列+暴力
- CR, LF, CR/LF 回车 换行
- session配置的2种方法与session过期设置
- SSE2加速
- SSM中使用generator自动生成MySQL表对应的DAO、mapping、entity
- notepad++如何跳到指定行
- uva 140 带宽暴力减枝
- 由浅入深C++语言中的输入输出流
- 5. ATF(ARM Trusted firmware)启动---bl31
- 设计模式——代理模式
- JS原型委托
- 自己摸索:机器学习从0到1系列---1 入门的准备
- JS实现使用POST方式发送请求
- matlab IDE切换窗口快捷键
- 音视频同步(播放)原理