zoukankan      html  css  js  c++  java
  • zoj3471 Most Powerful

    题目链接:https://vjudge.net/problem/ZOJ-3471#author=yupengju

    题意:不超过10种气体,两两之间相互碰撞可以产生一定的能量,如a碰b,那么b气体就消失,自身不能碰自身,问最后所能得到的最大能量

    设f[s]表示最后状态为s时能得到的最大能量(最后的状态一定是某一个位为1,其他都被碰撞过为0)

    则有f[s]=max(f[s],f[s']+a[i][j]),这儿s的第i位为1,第j位为0;s'的第j位为1

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int a[15][15],f[(1<<15)],n,i,j,s;
    
    int main(){
    	while (cin>>n){
    	  if (n==0) break;
    	  for (i=0;i<n;i++)
    	    for (j=0;j<n;j++) cin>>a[i][j];
    	  memset(f,0,sizeof(f));
    	  for (s=(1<<n)-1;s>=0;s--) //*
    	    for (i=0;i<n;i++)
    	      if ((s&(1<<i))) 
    	        for (j=0;j<n;j++)
    	          if (!(s&(1<<j))) f[s]=max(f[s],f[s^(1<<j)]+a[i][j]);
    	  int ans=0;
    	  for (i=0;i<n;i++) ans=max(ans,f[1<<i]);
    	  cout<<ans<<endl;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    1.13 Flask
    1.12 Flask 复习
    1.11 flask
    1.10 flask
    1.9 flask
    1.8 flask 路由
    sql server存储过程
    Ajax学习笔记
    随机密码字典生成器
    jRazor
  • 原文地址:https://www.cnblogs.com/edmunds/p/13657906.html
Copyright © 2011-2022 走看看