您的位置:首页 > 其它

vj P1547 逆转,然后再见(记忆化搜索)

2016-07-22 13:40 393 查看
水题

#include <bits/stdc++.h>
using namespace std;

int s[110][110]={0};
int n;
struct NODE
{
int value;
int flag;
}node[110];

int minn=1e6;
int FLAG=0;
int sum=0;
void bfs(int k)
{
if(sum<minn&&FLAG==(n-1)) {minn=sum;return;}

if(k>n) return;

for(int i=1;i<=k;++i)
{
if(node[i].flag>0) {
node[i].flag--;
node[k].flag++;
sum+=s[i][k];
FLAG++;
bfs(k+1);
node[i].flag++;
node[k].flag--;
sum-=s[i][k];
FLAG--;
}
}

}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;++i)
for(int j=i+1;j<=n;++j)
scanf("%d",&s[i][j]);
for(int i=1;i<=n;++i)
node[i].flag=0;
node[1].value=0;
node[1].flag=3;

bfs(2);

printf("%d\n",minn);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: