UVA 10118 dfs
来源:互联网 发布:mac安装win10格式化 编辑:程序博客网 时间:2024/06/04 00:54
/*有四堆糖果 每堆糖果都是n个 并且糖果用一个<=20的数来表示,问一个人拿着一个篮子 篮子的容量是5 一旦拿的这个和篮子里的相等,就把篮子里的这个拿出来 要不然就把拿的这个放进篮子里 问最大你能拿到多少对*/#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<cmath>#include<queue>#include<stack>#include<map>#include<set>#include<vector>using namespace std;typedef long long ll;typedef pair<int,int> pp;#define inf 0x3f3f3f3f#define eps 1e-10#define maxl 100010#define mem(i,j) memset(i,j,sizeof(i))const int mod=1e9+7;const double pi=acos(-1);int d[44][44][44][44];//表示的就是每个篮子里面还有多少个时候的最大对数 所以初始状态为d[0][0][0][0]int a[44][44];int vis[24];int n;int dfs(int step,int num[]){ int &ans=d[num[0]][num[1]][num[2]][num[3]];//前面记忆化剪枝 if(ans>=0) return ans; if(step>=5) return 0; ans=0; for(int i=0;i<4;i++){ int l[4]; for(int j=0;j<4;j++) l[j]=num[j];//用来改变状态 l[i]++; if(l[i]>n) continue; if(vis[a[l[i]][i]]){ //判断成对的话只要标记就好了 注意标记的改变 vis[a[l[i]][i]]=0; ans=max(ans,dfs(step-1,l)+1); vis[a[l[i]][i]]=1;//这里改回来只是为了下一次用的时候不用再初始化 } else{ vis[a[l[i]][i]]=1; ans=max(ans,dfs(step+1,l)); vis[a[l[i]][i]]=0; } } return ans;}int main(){ freopen("in.txt", "r", stdin); while(cin>>n&&n){ memset(d,-1,sizeof(d)); // memset(vis,0,sizeof(vis)); for(int j=1;j<=n;j++)//注意这里的输入 for(int i=0;i<4;i++) cin>>a[j][i]; int c[4]={0}; printf("%d\n",dfs(0,c)); }}
0 0
- UVA 10118 dfs
- UVa 10118DFS记忆化搜素
- 【DFS】UVA
- 【DFS】UVA
- uva 784(dfs)
- dfs uva-297-Quadtrees
- UVA 10318 简单dfs
- uva 11218 KTV(DFS)
- uva 301 Transportation (DFS)
- UVA 185(暴力DFS)
- UVA 11218 - KTV DFS
- uva 1267 - Network(dfs)
- uva 669 - Defragment(dfs)
- uva 10609 - Fractal(dfs)
- uva 784(dfs)
- Oil Deposits uva DFS
- XYZZY uva BFS+DFS
- Bicoloring uva DFS
- 动态面板——自动幻灯片
- AdaultBird--我的黑马程序员之路!Chapter2---异常体系,多线程,同步代码块和同步函数,死锁
- 0909Android基础安卓四大组件之Service
- busybox移植及ubuntu常用命令
- 字符串加密
- UVA 10118 dfs
- [分布式系统]-分布式消息系统:Kafka
- 115 城市平乱【dijkstra】
- hdu 1002 A + B Problem II(Java)
- tomcat 之startup.bat文件
- java parseInt和valueof的区别
- 今天学习了正则表达式
- Python学习----面向对象高级编程
- 当页面完全加载完成后执行一个js函数