zoukankan      html  css  js  c++  java
  • 数字数据fzu 2120 数字排列

    最近研究数字数据,稍微总结一下,以后继续补充:

        

        Problem 2120 数字排列

        

        

    Accept: 38    Submit: 176
    Time Limit: 1000 mSec    Memory Limit : 32768 KB

        

    Problem Description

    S到得了一个数,他为认相邻位上的数字与数字之间会发生不良影响,比如123,1和2之间发生一个不良影响值,2和3之间发生一个不良影响值。在现他想整调这个数每位的数字的序顺,使得终究到得的数的总的不良影响值最小,且没有导前0。

    Input

    入输数据的第一行为T示表有T组数据。每组数据先入输一个整数n(0<n<1000000000),接下来入输10*10的矩阵,Aij示表数字i与数字j相邻发生的不良影响值,0<Aij<1000000,矩阵是对称的,Aij与Aji相称。

    Output

    对于每组数据输出一行一个数,示表最小的不良影响值。

    Sample Input

    1 123 0 0 0 0 0 0 0 0 0 0 0 0 10 1 0 0 0 0 0 0 0 10 0 2 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

    Sample Output

    3

    Source

    FOJ有奖月赛-2013年4月(校赛热身赛)
        每日一道理
    曾经辉煌过,曾经凋零过,这可是你至死不渝的生活吗?我亲爱的母亲—大自然。多少次,我伏在地上,去聆听你沉重的脉搏声;多少次,我伫立在山前,去感受那松涛千年的浩瀚。你的豪壮,足以让中华民族腾飞;你的无私,谱写了一曲曲感人至深的千古壮曲。

        
    这是一道TSP的种变题,由于不大于12,故用DFS+剪枝可以过

        没啥好讲的,就是不能有导前0,囧,刚开始不当真读题,WA得措所知不

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int map[11][11],v[11],a[11];
    int mx,mn,n,ans;
    void dfs(int x,int cost,int k){//id  消费  个数
    	if(k==n){ans=min(ans,cost);return ;}
    	if(cost+(n-k)*mn>=ans)return;//剪枝
    	for(int i=0;i<n;i++){
    		if(v[i]==1)continue;
    		v[i]=1;
    		dfs(a[i],cost+map[x][a[i]],k+1);
    		v[i]=0;
    	}
    }
    int main(){
    	int T;
    	char ch[11];
    	cin>>T;n=0;
    	while(T--){
    		//cout<<"start"<<endl;
    		//while((c=getchar())!='\n')a[n++]=c-'0';
    		cin>>ch;n=strlen(ch);
    		for(int i=0;i<n;i++)a[i]=ch[i]-'0';
    		mn=100000000;mx=-1;ans=0;
    		for(int i=0;i<10;i++)
    			for(int j=0;j<10;j++){
    				cin>>map[i][j];
    				if(map[i][j]!=0){
    					mn=min(map[i][j],mn);
    					mx=max(map[i][j],mx);
    					ans+=map[i][j];
    				}
    			}
    	       if(mx==mn)ans=(n-1)*mn;//如果全体相称,ans=(n-1)*mx
    		   else {
    			for(int i=0;i<n;i++){
    			if(a[i]==0)continue;
    			memset(v,0,sizeof(v));
    			v[i]=1;
    			dfs(a[i],0,1);
    			}
    		   }
    			cout<<ans<<endl;
    	}
    return 0;
    }

        
     

    文章结束给大家分享下程序员的一些笑话语录: 3G普不普及现在已经不是看终端了,而是看应用,有好的,便宜实用的应用,花1000多买个能用的智能手机应该不是什么难事。反过来说,你200元拿一个智能手机,没有好的应用,看个电影要几十元,也是没人用3G。

  • 相关阅读:
    SDN第四次上机作业
    SDN第四次作业
    SDN第三次上机作业
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
    个人作业——软件产品案例分析(待更)
    软工 实验三 需求分析(沈樟伟组)
    个人博客二:需求分析
    微软小娜APP的案例分析
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3043273.html
Copyright © 2011-2022 走看看