uva 10604 Chemical Reaction 记忆化搜索
2015-03-03 10:12
225 查看
uva 10604 Chemical Reaction
解决方案:dp思路:记忆化搜索,这题只有六种化学药品,可以开一个六维的数组进行dp,dp[a1][a2][a3][a4][a5][a6],a1...a6分别表示这六种药品剩余多少,然后选两种药品进化学反应(可以使同样类型的药品),进入下一状态进行搜索,每个状态由下一状态决定其最优值。
code:
解决方案:dp思路:记忆化搜索,这题只有六种化学药品,可以开一个六维的数组进行dp,dp[a1][a2][a3][a4][a5][a6],a1...a6分别表示这六种药品剩余多少,然后选两种药品进化学反应(可以使同样类型的药品),进入下一状态进行搜索,每个状态由下一状态决定其最优值。
code:
#include <iostream> #include<cstdio> #include<cstring> using namespace std; const int inf=0x3f3f3f3f; int dp[12][12][12][12][12][12]; int flag[12][12][12][12][12][12]; int cnt[7]; int trans[7][7][2]; int dfs(int a1,int a2,int a3,int a4,int a5,int a6) { int &f=flag[a1][a2][a3][a4][a5][a6]; int &result=dp[a1][a2][a3][a4][a5][a6]; if(f) { return result; } f=true; result=inf; for(int i=1; i<=6; i++) { for(int j=1; j<=6; j++) { if(i==j&&cnt[i]<2) continue; if(cnt[i]>=1&&cnt[j]>=1) { cnt[i]--,cnt[j]--; cnt[trans[i][j][0]]++; result=min(result,dfs(cnt[1],cnt[2],cnt[3],cnt[4],cnt[5],cnt[6])+trans[i][j][1]); cnt[trans[i][j][0]]--; cnt[i]++,cnt[j]++; } } } if(result==inf) return result=0; return result; } int main() { int t,n,k; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { int res,heat; scanf("%d%d",&res,&heat); trans[i][j][0]=res; trans[i][j][1]=heat; } } memset(cnt,0,sizeof(cnt)); memset(flag,false,sizeof(flag)); scanf("%d",&k); for(int i=1; i<=k; i++) { int cubes; scanf("%d",&cubes); cnt[cubes]++; } printf("%d\n",dfs(cnt[1],cnt[2],cnt[3],cnt[4],cnt[5],cnt[6])); char skip[3]; scanf("%s",skip); } return 0; }
相关文章推荐
- UVA - 10604 Chemical Reaction 记忆化搜索
- uva 10604 - Chemical Reaction (记忆化搜索)
- UVa 10604 Chemical Reaction(hash记忆化搜索)
- UVA 10604 (记忆化搜索 + hash)
- UVA - 10604Chemical Reaction(记忆化搜索)
- UVA 10118 Free Candies(记忆化搜索)
- UVA 10626 Buying Coke(dp + 记忆化搜索)
- UVa 103 Stacking Box(记忆化搜索)
- UVa 免费糖果(记忆化搜索)
- UVALive 6432 —— Influence(记忆化搜索 + 状态压缩)
- UVA 11008 Antimatter Ray Clearcutting(状态压缩+记忆化搜索)
- UVALive 4050 Hanoi Towers(记忆化搜索)
- uva 11600 - Masud Rana(记忆化搜索)
- uva 10911 - Forming Quiz Teams(记忆化搜索)
- uva 10604
- UVA 11324 The Largest Clique(强连通缩点+记忆化搜索)
- UVA 1099 Sharing Chocolate(记忆化搜索)
- uva 825 Walking on the Safe Side(动态规划:记忆化搜索)
- 记忆化搜索 逆向dp uva10118
- UVa 10891 Game of Sum / 记忆化搜索