uvalive3667 ruler
来源:互联网 发布:centos openssl安装 编辑:程序博客网 时间:2024/06/12 20:51
tips:
回溯
use a queue to restore the temporary marked array(vis) , and when it back, set vis = 0
first floor give out all the received res, and combine with all the d to make new res, and mark all length which can get then,
code:
<pre name="code" class="cpp">#include<cstdio>#include<cmath>#include<string>#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int maxn = 55;int d[maxn], vis[maxn];int pos[1000005];int n, len;int res[maxn];bool dfs(int cnt) {if(cnt == len) {for(int i=1; i<n; i++) {if(!vis[i]) return false;}return true;}queue<int> q;for(int i=1; i<cnt; i++) {for(int j=1; j<n; j++) {if(!vis[j]) {int temp = res[i]+d[j];if(temp <= res[cnt-1] || temp >= d[n])continue;//make sure that the new answer is biger than everres[cnt] = temp;for(int k=1; k<cnt; k++) {temp = res[cnt]-res[k];if(vis[pos[temp]]==0 && pos[temp]) {q.push(pos[temp]);vis[pos[temp]] = 1;}}temp = d[n]-res[cnt];if(!vis[pos[temp]] && pos[temp]) {vis[pos[temp]] = 1;q.push(pos[temp]);}if(dfs(cnt+1)) return true;while(!q.empty()) {vis[q.front()]=0;q.pop();}}}}return false;}int main() {int kase=1;while(scanf("%d", &n) != EOF && n) {memset(vis, 0 ,sizeof(vis));memset(pos, 0, sizeof(pos));for(int i=1; i<=n; i++)scanf("%d", &d[i]); sort(d + 1, d + 1 + n); n = unique(d + 1, d + 1 + n) - d - 1; for (int i = 1; i <= n; i++) pos[d[i]] = i; len = sqrt(2 * n) - 1; res[1] = 0; while (!dfs(2)) len++; res[len] = d[n]; printf("Case %d:\n", kase++); printf("%d\n", len); for (int i = 1; i <= len; i++) printf("%d ", res[i]); printf("\n"); }return 0;}
0 0
- uvalive3667 ruler
- uvalive3667(深搜)
- Golomb ruler
- LA 3667 Ruler
- la 3667 ruler
- UVALive - 3667 Ruler
- uva 1377 - Ruler(BFS)
- (intermediate) UVA 1377 - Ruler
- [dfs] UVALive 3667 Ruler
- 递归 example ruler
- UVA 1377 Ruler(dfs)
- LA 3667 Ruler IDA* .
- 金额刻度尺Ruler
- windows phone 7 instance: ruler
- UVa 1377 - Ruler(BFS)
- UVALive 3667 Ruler (模拟)
- InstallAnyWhere中关于ruler的一些说明
- what's this , it's a ruler
- [notes]chap14 Iterator Generator-expression 生成器表达式
- 博弈论小结
- Netty中的ByteBuf原理分析
- [DP 容斥原理] BZOJ3622 已经没有什么好害怕的了 && BZOJ 2024 [SHOI2009] 舞会
- 项目1:个人所得税计算器
- uvalive3667 ruler
- linux搭建jenkins
- Linux下创建Oracle的OEM
- 第3周项目3(1) 输出星号图
- Leetcode:290. Word Pattern(JAVA)
- Android GirdView/Listview 最后一行显示不完整
- java中标签库.tld文件的书写格式
- soledede--牛顿下山法
- ViewPager的简单应用