[Usaco2008 Oct]灌水
题啥意思我也不说了,是个人应该都看得懂
我的做法是这个样子的:
- 设第i个为了灌到水的代价为cost[i]
- 每次在i块农田里选第k块还未确定的、花费最少的农田的代价把它设为确定的
- 再以这块农田向周围的农田引水
重复以上三个步骤即可,代码如下:
#include<iostream>
using namespace std;
int n,w[301],cost[301],book[301];
int p[301][301],k,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i];
cost[i]=w[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>p[i][j];
}
}
for(int i=1;i<=n;i++)
{
k=0;
for(int j=1;j<=n;j++)
{
if(!book[j])
{
if(cost[k]>cost[j]||!k)
{
k=j;
}
}
}
book[k]=1;
for(int j=1;j<=n;j++)
{
if(j!=k)
{
if(p[k][j]<cost[j]&&!book[j])
{
cost[j]=p[k][j];
}
}
}
}
for(int i=1;i<=n;i++)
{
ans+=cost[i];
}
cout<<ans;
}