有n种气体,a和b碰撞以后b会消失,同时产生一定的能量,求可获得的最大能量。
我终于又找到水题啦
看数据范围只算法系列。我们用0来表示该气体存在,1表示不存在,转移很好想啊。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <iostream>
using namespace std;
const int N=15;
int n,a[N][N],f[1025],ans;
int i,j,s,news;
int bit[N];
void init(){
for (int i=0;i<N;i++)
bit[i]=(1<<i);
return ;
}
int main(){
init();
for (cin>>n;n;cin>>n){
for (i=0;i<n;i++)
for (j=0;j<n;j++)
cin>>a[i][j];
memset(f,0,sizeof f);
for (s=0;s<bit[n];s++)
for (i=0;i<n;i++)
if (!(s & bit[i]))
for (j=0;j<n;j++)
if (i!=j && !(s & bit[j])){
news=s | bit[j];
f[news]=max(f[s]+a[i][j],f[news]);
}
ans=0;
for (i=0;i<bit[n];i++)
ans=max(ans,f[i]);
cout<<ans<<endl;
}
return 0;
}