ural 1152 搜索或状压
来源:互联网 发布:garch模型 python 编辑:程序博客网 时间:2024/05/05 06:42
n个阳台,每个阳台上有怪物,第一个阳台跟最后一个相邻,每次攻击其中一个阳台,那么相邻的两个也会被破坏掉,但是你攻击一次,剩下的没有被消灭的怪兽就会攻击你,问消灭所有怪兽 所受伤害值最少是多少
#include <bits/stdc++.h>#include<cmath>#include<cstdlib>#define INF 0x3f3f3f3fusing namespace std;int ans;int n;int a[25];int sum=0;int vis[1000];int Mi=INF;void DFS(int sum,int mi){ if(mi>=Mi) ///剪枝 return ; if(sum==0) { Mi=min(Mi,mi); return; } for(int i=0; i<n; i++) { if(!vis[i]) { int t1=(i+n-1)%n; int t2=(i+1)%n; vis[i]=1; if(!vis[t1]&&!vis[t2]) { vis[t1]=vis[t2]=1; sum=sum-a[t1]-a[t2]-a[i]; mi+=sum; DFS(sum,mi); vis[t1]=vis[t2]=0; mi-=sum; sum=sum+a[t1]+a[t2]+a[i]; } else if(!vis[t1]) { sum=sum-a[t1]-a[i]; mi+=sum; vis[t1]=1; DFS(sum,mi); vis[t1]=0; mi-=sum; sum=sum+a[t1]+a[i]; } else if(!vis[t2]) { sum=sum-a[t2]-a[i]; mi+=sum; vis[t2]=1; DFS(sum,mi); vis[t2]=0; mi-=sum; sum=sum+a[t2]+a[i]; } else ///忘记自己本身也要相加了 { sum=sum-a[i]; mi+=sum; DFS(sum,mi); mi-=sum; sum=sum+a[i]; } vis[i]=0; } }}int main(){ while(~scanf("%d",&n)) { Mi=INF; memset(vis,0,sizeof(vis)); sum=0; for(int i=0; i<n; i++) { scanf("%d",&a[i]); sum+=a[i]; } DFS(sum,0); printf("%d\n",Mi); } return 0;}
记忆化搜索写法
#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<iostream> using namespace std;int a[25], f[(1<<21)+10];bool vis[(1<<21)+10];int n;int dfs(int x, int s){if (vis[x]) return f[x];vis[x]=true;if (x==0) return f[x]=0;int res=2100000000;for (int i=1; i<=n; i++){int newx=x, news=s;for (int j=i-1; j<=i+1; j++){int k=j;if (j==0) k=n; else if (j==n+1) k=1;if (newx&(1<<(k-1))){news-=a[k];newx-=(1<<(k-1));}}if (newx!=x)res=min(res, dfs(newx, news)+news);}return f[x]=res;} int main(){int s=0;scanf("%d", &n);for (int i=1; i<=n; i++) {scanf("%d", &a[i]);s+=a[i];}memset(f, 63, sizeof(f));memset(vis, 0, sizeof(vis));f[(1<<n)-1]=0;printf("%d", dfs((1<<n)-1, s));}//hzj
1 0
- ural 1152 搜索或状压
- URAL 1152 False Mirrors 搜索|记忆化搜索|状压
- URAL 1033|Labyrinth|搜索
- URAL 1152 False Mirrors 状压+记忆化搜索
- URAL 1152 False Mirrors(记忆化?搜索)
- URAL 1298 knight dfs搜索
- ural 1148 记忆化搜索
- ural 1009 记忆化搜索
- URAL 1152
- URAL 1017 Staircases 记忆化搜索
- 【搜索】URAL 1498 Stroke at Full Speed
- ural 1136. Parliament -搜索二叉树
- URAL 1152 False Mirrors
- Ural 1152 False Mirrors
- 搜索文件或目录
- URAL
- 【ural】
- URAL
- 第六届acm河南省赛——Card Trick 模拟
- IE如何禁止某个特定网站的Cookie
- 第106讲: Spark Streaming电商广告点击综合案例黑名单过滤实现
- 做技术必须沉得住气
- 算法的正确打开方式
- ural 1152 搜索或状压
- Java aidl分析
- nyoj 1242 Interference Signal 河南省ACM2015年省赛G题
- C++ 流操作(531 --)
- mysql优化20条
- spark 使用kryo
- 定义一个定义完整的类(是可以当作独立的产品发布,成为众多项目中的“基础工程”)。扩展+、-、*、/运算符的功能,使之能与double型数据进行运算。设Complex c; double d; c+d和
- maven搭建ssm分模块框架+dubbo (myeclipse版) (三)
- 面试总结一