题目背景
本题难度普及-,请noip两个组别的选手都把它AC(不然你 noip省三都保不住了 )
ps:三年OI一场空,day1T1见祖宗。。。
题目描述
Cozy Glow偷偷摸摸的造了一个魔法阵,这个魔法阵在吸取小马国的魔力,所以你得赶紧把它毁掉。
这个魔法阵由若干个神器组成,每个神器都有一个法力值,每两个神器之间也都有一个关联值。你要依次把这些神器拿走,但是,每拿走一个神器,你就会受到一定量的反噬,反噬的量为这个神器与其他还在神器的关联值乘以这个神器的法力值,为了减少反噬,tb148需要拿走每个神器,但由于他贪生怕死,他想让他受到的反噬值之和最小,现在tb148想知道,怎样拿走神器,才能让反噬值的和最小。
输入格式
第一行,神器的个数
第二行,每一个神器的法力值
接下来,将以邻接矩阵的形式输入神器之间的关联值
输出格式
最好的拿取方式所产生反噬值的和
输入输出样例
输入 #1复制
4
2 5 1 7
0 343 154 12
343 0 214 132
154 214 0 441
12 132 441 0
输出 #1复制
2179
说明/提示
神器个数<=1000
所有其他的值<=2000000
正对角线上的数保证都是零。。。
不开long long见祖宗
上代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,about,ans;
ll magic[2000005];
int main()
{
scanf("%lld",&n);
for(ll i=1;i<=n;++i)scanf("%lld",&magic[i]);
for(ll i=1;i<=n;++i)
for(ll j=1;j<=n;++j)
{
scanf("%lld",&about);
if(i>j)ans+=about*min(magic[i],magic[j]);
}
printf("%lld",ans);
return 0;
}