【题解】最短路径

题目描述

        某个国家有N+1个城市,编号从0到N。这个国家的交通比较简单,只有相邻的两个城市才直接有路相连,对于城市i(0≤i<N)来说,城市i与城市i+1之间有一条长度为road[i]的高速公路,还有一条长度为water[i]的水路。现在你需要从城市0到达城市N,最短路径是多少?有个要求,你走的水路不能超过k条(因为害怕海盗)。

输入输出格式

输入格式

        第一行,两个整数,N和K。1≤N≤50,0≤k≤N。

        第二行,N个整数,空格分开,每个整数的范围是1至1000。第i个整数表示城市i到城市i+1之间的高速公路的长度。注意:i的下标从0开始。

        第三行,N个整数,空格分开,每个整数的范围是1至1000。

        第i个整数表示城市i到城市i+1之间的水路的长度。注意:i的下标从0开始。

输出格式

        一个整数,表示从城市0到达城市N,最短路径是多少?走的水路不能超过k条。

输入输出样例

输入样例

3 1

4 6 7

1 2 3

输出样例

13

说明

样例说明

        城市0到城市1走高速公路,长度是4;城市1到城市2走高度公路,长度是6;城市2到城市3走水路,长度是3。因此,最短路径是13。

题解

         贪心水题,每次选能相对对应陆路减尽可能多路径的水路走即可。

#include <iostream>
#include <algorithm>

using namespace std;

int n, k;
int a[51], b[51];

int main()
{
    cin >> n >> k;
    for(int i = 1; i <= n; i++) 
    {
        cin >> a[i];
        a[i] += a[i-1];
    }
    for(int i = 1; i <= n; i++)
    {
        cin >> b[i];
        b[i] -= a[i] - a[i-1];
    }
    sort(b+1,b+1+n);
    for(int i = 1; i <= k; i++)
    {
        if(b[i] > 0) break;
        a[n] += b[i];
    }
    return cout << a[n], 0;
}
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10625048.html
今日推荐