UVA - 10604 Chemical Reaction 记忆化搜索
2014-11-23 09:07
218 查看
题目大意:给出m个药品,m不大于7,两种药品合在一起可以发生化学反应,反应有吸热的也有放热的,两种药品反映后还会生成另一种药品,求将k中药品进行合并,计算出最小的热量
解题思路:本来用二进制法表示药品的状态的,发现超时了,于是便参考了一下别人的思路,竟然使用6维数组表示状态,发现确实可以,因为药品列别不大于7,那么6维数组的大小就不会太大了,每一个维度放一种药品的数量,这样就可以计算了,具体看代码
解题思路:本来用二进制法表示药品的状态的,发现超时了,于是便参考了一下别人的思路,竟然使用6维数组表示状态,发现确实可以,因为药品列别不大于7,那么6维数组的大小就不会太大了,每一个维度放一种药品的数量,这样就可以计算了,具体看代码
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define INF 1<<30 const int N=12; bool vis ; int tube ,data [2],map ; int dp(int,int,int,int,int,int); int main() { int t,n,m; scanf("%d",&t); while(t--) { memset(vis,0,sizeof(vis)); memset(map,0,sizeof(map)); memset(tube,0,sizeof(tube)); scanf("%d",&n); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d%d",&data[i][j][0],&data[i][j][1]); } } scanf("%d",&m); for(int i=0;i<m;i++) { int temp; scanf("%d",&temp); tube[temp]++; } printf("%d\n",dp(tube[1],tube[2],tube[3],tube[4],tube[5],tube[6])); char use[5];scanf("%s",use); } return 0; } int dp(int a,int b,int c,int d,int e,int f) { bool &flag=vis[a][b][c][d][e][f]; int &res=map[a][b][c][d][e][f]; if(flag) return res; else { res=INF; int m[7]={0,a,b,c,d,e,f}; for(int i=1;i<=6;i++) { for(int j=1;j<=6;j++) { if(i==j && m[i] < 2) continue; if(m[i]&&m[j]) { m[i]--;m[j]--;m[data[i][j][0]]++; int temp=dp(m[1],m[2],m[3],m[4],m[5],m[6]); if(temp!=INF) res=min(res,temp+data[i][j][1]); m[i]++;m[j]++;m[data[i][j][0]]--; } } } flag=1; if(res==INF) res=0; return res; } }
相关文章推荐
- uva 10604 - Chemical Reaction (记忆化搜索)
- UVa 10604 Chemical Reaction(hash记忆化搜索)
- UVA 10604 (记忆化搜索 + hash)
- UVA - 10604Chemical Reaction(记忆化搜索)
- uva 10604 Chemical Reaction 记忆化搜索
- UVA - 10604 Chemical Reaction
- uva 10651 - Pebble Solitaire(记忆化搜索)
- UVA - 11258 String Partition 记忆化搜索
- uva10651 Pebble Solitaire(记忆化搜索)
- uva_10626 - Buying Coke( DP,记忆化搜索 )
- UVA11468 AC自动机+记忆化搜索
- UVa 10285 Longest Run on a Snowboard - 记忆化搜索
- UVa 10118 - Free Candies(记忆化搜索)
- UVA 10913 Walking on a Grid(记忆化搜索)
- UVA 10604(进制式dp)
- uva 10626 - Buying Coke(记忆化搜索)
- UVA - 10604 Chemical Reaction
- uva 11468-Substring ac自动机 + 记忆化搜索
- uva11008 - Antimatter Ray Clearcutting 状态压缩记忆化搜索
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)