您的位置:首页 > Web前端 > React

uva 10604 - Chemical Reaction

2014-03-14 13:59 274 查看
#include <stdio.h>
#include <string.h>
#define MAXN 12
#define min(a,b) (a)<(b)?(a):(b)
#define INF 1<<30

int n;
struct pair {
int next;
int energy;
}edge[6][6];
int table[MAXN][MAXN][MAXN][MAXN][MAXN][MAXN];
bool mark[MAXN][MAXN][MAXN][MAXN][MAXN][MAXN];
int m=0;

int dp(int x[]){
int a=x[0];
int b=x[1];
int c=x[2];
int d=x[3];
int e=x[4];
int f=x[5];
if(mark[a][b][c][d][e][f]==1) return table[a][b][c][d][e][f];
mark[a][b][c][d][e][f]=1;
table[a][b][c][d][e][f] = INF;
int y[] = {x[0],x[1],x[2],x[3],x[4],x[5]};
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
if(y[i]==0||y[j]==0) continue;
if(i==j&&y[i]<2) continue;
y[i]--;
y[j]--;
y[edge[i][j].next]++;
int tmp = dp(y);
if(tmp<INF) table[a][b][c][d][e][f]=min(table[a][b][c][d][e][f], tmp+edge[i][j].energy);
y[i]++;
y[j]++;
y[edge[i][j].next]--;
}
}
if(table[a][b][c][d][e][f]==INF) return table[a][b][c][d][e][f]=0;
else return table[a][b][c][d][e][f];
}

void solve()
{
int cases;
scanf("%d", &cases);
int tube[6];
while(cases--){
scanf("%d", &m);
memset(tube, 0, sizeof(tube));
memset(mark, 0, sizeof(mark));
for(int i=0;i<m;i++){
for(int j=0;j<m;j++){
scanf("%d%d",&edge[i][j].next, &edge[i][j].energy);
edge[i][j].next-=1;
}
}
int tmp=0,a=0;
scanf("%d", &tmp);
for(int i=0;i<tmp;i++){
scanf("%d", &a);
tube[a-1]++;
}
char ch[10];
scanf("%s", ch);
int result = dp(tube);
printf("%d\n", result);
}
}

int main()
{
solve();
return 0;
}

多么吊的一道题啊,java有过的求受教。

貌似java我刚开完数组就TLE了

java搞不过去就开了一个c++, 原来不更新数组空间时间差了2秒多。。。

鬼题目还卡语言呢,这题我直接交了20多发。。。我都不想说什么了,真没话说
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: