zoukankan      html  css  js  c++  java
  • Chemical Reaction UVA

    Miku

    这道题样例错了!!!

    正确解决方法 ⇒ 写一个搜索 ⇒ TLE ⇒进行记忆化改造 ⇒ Ac

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn =15;
    char c;
    int dp[maxn][maxn][maxn][maxn][maxn][maxn];
    int he[maxn][maxn],tu[maxn][maxn];
    int sum[maxn];
    int maxx;
    int n,k;
    int t;
    int cnt;
    int q;
    int dfs(){
    	int &ans=dp[sum[1]][sum[2]][sum[3]][sum[4]][sum[5]][sum[6]];
    	if(ans!=maxx)
    	return ans;
    	if(cnt==q-1)
    	return ans=0;
    	for(int i=1;i<=n;++i){
    		if(sum[i]){
    			sum[i]--;
    			for(int j=1;j<=n;++j){
    				if(sum[j]){
    					sum[j]--;
    					cnt++;
    					sum[tu[i][j]]++;
    					ans=min(ans,dfs()+he[i][j]);
    					cnt--;
    					sum[tu[i][j]]--;
    					sum[j]++;
    				}
    			}
    			sum[i]++;
    		}
    	}
    	return ans;
    	
    }
    int main(){
    	scanf("%d",&t);
    	while(t--){
    		memset(dp,0x7f,sizeof(dp));
    		memset(sum,0,sizeof(sum));
    		cnt=0;
    		memset(he,0,sizeof(he));
    		memset(tu,0,sizeof(tu));
    		maxx=dp[1][1][1][1][1][1];
    		scanf("%d",&n);
    		for(int i=1;i<=n;++i){
    			for(int j=1;j<=n;++j){
    				scanf("%d%d",&tu[i][j],&he[i][j]);
    			}
    		}
    		scanf("%d",&q);
    		for(int i=1;i<=q;++i){
    			scanf("%d",&k);
    			sum[k]++;
    		}
    		cout<<dfs()<<endl;
    		cin>>c;
    	}
    	return 0;
    }
    
  • 相关阅读:
    搜狗输入法招聘数据挖掘、自然语言处理实习生
    python 备忘
    从零开始
    [转]随笔
    重学python
    关于tensorflow conv2d卷积备忘的一点理解
    python args kwargs 传递参数的区别
    something backup
    R语言命令汇总
    newwork setup
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13499181.html
Copyright © 2011-2022 走看看