UVA 10651 Pebble Solitaire
来源:互联网 发布:淘宝如何开话费充值 编辑:程序博客网 时间:2024/04/30 01:12
【题意】12个位置,有些有鹅卵石,有些是空的,2个连续的鹅卵石,如果其左边连着的那个是空的,那么第二个鹅卵石可移动到那个空的位置上,并移除第1个鹅卵石;如果其右边连着的那个是空的,那么第一个鹅卵石可移动到那个空的位置上,并移除第2个鹅卵石。问最后最少可以剩下多少个鹅卵石?
【分析】由于3个连续出现的鹅卵石才有可能发生交换,所以枚举所有能够出现的状态,交换直接相邻3位取异或即可!记得回溯!
【AC代码】
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;const int inf = 0x3f3f3f3f;int ans,n;char s[13];int dfs(int sta){ int temp,last=0; for(int i=1; i<=10; i++) { if((sta&(1<<(i-1))&&sta&(1<<i)&&!(sta&(1<<(i+1))))||(!(sta&(1<<(i-1)))&&sta&(1<<i)&&sta&(1<<(i+1)))) { sta^=(1<<(i-1)); sta^=(1<<i); sta^=(1<<(i+1)); temp = dfs(sta); ans = min(ans,temp); sta^=(1<<(i-1)); sta^=(1<<i); sta^=(1<<(i+1)); } } if(last==0) { int cnt=0; for(int i=0; i<12; i++) { if(sta&(1<<i))cnt++; } ans = min(ans,cnt); } return ans;}int main(){ while(~scanf("%d",&n)) { for(int i=0; i<n; i++) { int sta=0; scanf("%s",s); for(int j=0; j<12; j++) { if(s[j]=='o') { sta = sta^(1<<j); } } ans = inf; dfs(sta); printf("%d\n",ans); } } return 0;}
1 0
- uva 10651 Pebble Solitaire
- UVA 10651 Pebble Solitaire
- Uva - 10651 - Pebble Solitaire
- uva 10651 pebble Solitaire
- UVa 10651 - Pebble Solitaire
- UVA - 10651 Pebble Solitaire
- UVa:10651 Pebble Solitaire
- uva 10651 Pebble Solitaire
- uva 10651 - Pebble Solitaire
- UVa 10651 - Pebble Solitaire
- UVA 10651 - Pebble Solitaire
- UVA 10651 Pebble Solitaire
- uva 10651 Pebble Solitaire
- UVA 10651 Pebble Solitaire
- UVa 10651 Pebble Solitaire (DFS)
- UVA 10651 --Pebble Solitaire +dfs
- Pebble Solitaire(UVA 10651)
- 记忆化搜索 uva-10651-Pebble Solitaire
- 深入理解JVM之四:类加载过程
- mt7628 gpio模拟spi驱动si32171
- jQuery学习笔记二——jQuery选择器
- SQL中的汇总数据(其实是聚集函数)
- ArcGIS Runtime SDK for iOS(三) --- Callout的自定义属性展示
- UVA 10651 Pebble Solitaire
- 网站的email地址
- 在Eclipse环境下编写ABAP程序
- iOS-开发
- bzoj 2251(后缀数组)
- PAT1003.我要通过!(20)(简单的c语言风格c++解法)
- Hadoop初识--Hadoop单机模式安装和环境配置
- UITableViewCell左滑动删除 和cell上按钮的点击事件
- CentOS下Redis服务器安装配置