UVA - 10604 Chemical Reaction
来源:互联网 发布:初中生考编程 编辑:程序博客网 时间:2024/05/19 13:56
有m种化学药品(m<=6),不同的药品和不同的药品混合将生成不同的药品并释放一定的热量(可能为负)。现在有k个装有化学药品的试管(2<=k<=10),要将他们混合成一种药品,我们知道混合的顺序不同则释放的总热量也不同,求最小总热量。六维记录当6种药品还有x1,x2,x3,x4,x5,x6时的最小热量
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int INF = 1<<30;int m,k,t[12],r[10][10],w[10][10],map[10][10][10][10][10][10];int vis[10][10][10][10][10][10];int dp(int x[]){ int &ans = map[x[1]][x[2]][x[3]][x[4]][x[5]][x[6]]; if (vis[x[1]][x[2]][x[3]][x[4]][x[5]][x[6]]) return ans; vis[x[1]][x[2]][x[3]][x[4]][x[5]][x[6]] = 1; if (x[1]+x[2]+x[3]+x[4]+x[5]+x[6]<=1) return ans = 0; ans = INF; int y[] = {x[0],x[1],x[2],x[3],x[4],x[5],x[6]}; for (int i = 1; i <= m; i++) if (y[i]){ --y[i]; for (int j = 1; j <= m; j++) if (y[j]){ --y[j]; ++y[r[i][j]]; if (dp(y) < INF) ans = min(ans,w[i][j]+dp(y)); ++y[j],--y[r[i][j]]; } ++y[i]; } return ans;}int main(){ int cas; scanf("%d",&cas); while (cas--){ memset(vis,0,sizeof(vis)); scanf("%d",&m); for (int i = 1; i <= m; i++) for (int j = 1; j <= m; j++) scanf("%d%d",&r[i][j],&w[i][j]); scanf("%d",&k); for (int i = 1; i <= k; i++) scanf("%d",&t[i]); scanf("%*s"); int x[12] = {0}; for (int i = 1; i <= k; i++) ++x[t[i]]; printf("%d\n",dp(x)); } return 0;}
- uva 10604 Chemical Reaction
- UVA - 10604 Chemical Reaction
- uva 10604 - Chemical Reaction
- uva 10604 - Chemical Reaction
- UVA 10604 - Chemical Reaction
- UVA - 10604 Chemical Reaction
- UVA - 10604 Chemical Reaction
- uva 10604Chemical Reaction
- uva 10604 Chemical Reaction (DP)
- Chemical Reaction - UVa 10604 dp
- UVA 10604 - Chemical Reaction (状态压缩)
- UVA - 10604 Chemical Reaction 记忆化搜索
- uva 10604 Chemical Reaction 记忆化搜索
- dp(UVa 10604 - Chemical Reaction)
- UVA 10604--Chemical Reaction+记忆化搜索
- uva 10604 - Chemical Reaction(状态压缩dp)
- uva 10604 - Chemical Reaction (记忆化搜索)
- UVA - 10604Chemical Reaction(记忆化搜索)
- 关于SNMP的GetNextRequest PDU实现分析
- wince 蓝牙 学习 1
- openstack Multihost External Network 部署
- DC的卸载
- Ubuntu下安装VMware tools 的解决办法
- UVA - 10604 Chemical Reaction
- 判断一个数组中的数字是否连续
- jsp下拉框从数据库获取数据进行填充并且实现二级级联
- CONST的几种用法总结
- 折叠margin 折叠margin的消除
- 实用的CAM350快捷键命令
- Socket 通信原理 -- Android客户端和服务器以TCP&&UDP方式互通
- 如何配置OpenGL ES的上下文(OpenGL ES2.0官方文档翻译)
- 分布式文件系统及部署