DP与位运算的结合
2016-05-15 20:09
274 查看
uva10651
代码:
代码:
#include <iostream> using namespace std; #include <cstring> #include <stdio.h> char str[15]; int a; int vis[4100]; int _min; bool check(int i,int j) { if((j & (1 << (i - 1))) && (j & (1 << i)) && !(j & (1 << (i + 1)))) return true; if(!(j & (1 << (i - 1))) &&(j & (1 << i)) &&(j &(1 << (i + 1)))) return true; return false; } void dp(int k) { //cout << "1 "; if(vis[k]) return; //vis[k] = 1; for(int i = 1; i <= 10; i++) { int st = k; if(check(i,k)) { st ^= (1 << (i - 1)); st ^= (1 << i); st ^= (1 << (i + 1)); dp(st); } } int cnt = 0; for(int i = 0; i < 12; i++) if(k &(1 << i)) cnt++; _min = min(_min,cnt); vis[k] = cnt; } int main() { int T; scanf("%d",&T); getchar(); while(T--) { gets(str); //cout << str<<endl; int a= 0 ; for(int i = 0; i < strlen(str); i++) { if(str[i] == 'o') a|= (1 << i); } _min =13; dp(a); memset(vis,0,sizeof(vis)); // _min = 13; /* for(int i = 0; i < 12; i++) _min = min(_min,vis[i]);*/ printf("%d\n",_min); } return 0; }
相关文章推荐
- 360市场aapt命令执行出错(appt 解析报错)解决办法
- android 常用控件listview的使用(二)
- android开发笔记之 Android代码混淆打包
- js学习四-RegExp正则表达式
- C#数组详解
- Matlab导出eps或jpg图片的四种方法
- POJ 1082---->一个神一般的题
- POJ 1082---->一个神一般的题
- Surprise团队第一周项目总结
- 学习进度条
- 练习26:代码改错
- poj 3335(半平面交)
- 基于BLM业务领先模型演化的项目管理四张地图
- linux缺页异常处理--用户空间
- ZOJ 2425-H - Inversion-给逆序对构造序列(构造)
- 调整数组的顺序
- spring postconstruct
- Java.io.File类的学习
- HDU 2159-FATE(完全背包)
- linux缺页异常处理--内核空间