• CF #321 (Div. 2) D


    不说了,爆内存好几次,后来醒起状态有重复。。。

    状压+TSP

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #define LL long long
    using namespace std;
    //#pragma comment(linker, "/STACK:102400000,102400000")
    const int MAX=100005;
    
    int pre[20][20];
    int dish[20];
    
    LL dp[20][1<<20];
    
    template<class T>
    inline T IN(T &num){
        num = 0;
        char c = getchar(), f = 0;
        while(c != '-' && (c < '0' || c > '9')) c = getchar();
        if(c == '-') f = 1, c = getchar();
        while('0' <= c && c <= '9') num = num * 10 + c - '0', c = getchar();
        if(f) num = -num;
        return num;
    }
    
    struct Status{
    	int l,s;
    	Status(){};
    	Status(int ll,int ss){l=ll,s=ss;}
    };
    
    int main(){
    	int n,m,k;
    	int x,y,c;
    	
    	while(scanf("%d%d%d",&n,&m,&k)!=EOF){
    		queue<Status>que;
    		memset(pre,0,sizeof(pre));
    		memset(dp,-1,sizeof(dp));
    		for(int i=1;i<=n;i++)
    			IN(dish[i]);
    		for(int i=1;i<=k;i++){
    			IN(x),IN(y),IN(c);
    			pre[x][y]=c;
    		}
    		LL ans=0;
    		for(int i=1;i<=n;i++){
    			dp[i][1<<i]=dish[i];
    			ans=max(ans,(LL)dish[i]);
    			que.push(Status(i,1<<i));
    		}
    		Status tmp; int e;
    		for(int i=2;i<m;i++){
    			int sz=que.size();
    			while(sz--){
    				tmp=que.front();
    				que.pop();
    				for(int j=1;j<=n;j++){
    					if(tmp.s&(1<<j)){
    					}
    					else{
    						k=tmp.l; e=tmp.s|(1<<j);
    						if(dp[j][e]==-1) que.push(Status(j,e));
    						dp[j][e]=max(dp[j][e],dp[k][tmp.s]+pre[k][j]+dish[j]);
    					}
    				}
    			}
    		}
    		if(m>=2){
    			while(!que.empty()){
    				tmp=que.front();
    				que.pop();
    				for(int j=1;j<=n;j++){
    					if(tmp.s&(1<<j)){
    					}
    					else{
    						k=tmp.l; e=tmp.s|(1<<j);
    						dp[j][e]=max(dp[j][e],dp[k][tmp.s]+pre[k][j]+dish[j]);
    						ans=max(ans,dp[j][e]);
    					}
    				}
    			}
    		}
    		cout<<ans<<endl;
    		
    	}
    	return 0;
    }
    
  • 相关阅读:
    深入Activity
    swift -变量的定义与使用
    tomcat中的Manager App帐号password管理
    TabLayout+Fragment+ViewPager+FragmentStatePagerAdapter实现Tab标签
    基于redis的分布式ID生成器
    Event-Souring模式
    Tensorflow
    RabbitMQ消息队列(五):Routing 消息路由
    RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)
    RabbitMQ消息队列(三):任务分发机制
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4831593.html
Copyright © 2020-2023  润新知