Floyd算法解决 Jump

Description

There is n pillar, their heights are (A1,A2,A3,…An).you can jump at the top of the pillars. But you will lose abs(a[j]-a[i])*abs(j-i) power when you jump from i-th pillar to j-th pillar. At first you have m power. Can you jump from s-th pillar to e-th pillar.

Input

 

The input consists of several test cases.

every test case is two integer n(2<=n<200),q(1=<q<=10000).

The second line contain n integer A1,A2,A3,..An.

The next q line contain there integer s,e,m.

 

Output

If you can jump from s to e, with less or equal m power output “Yes”, else output “No”

Sample Input

3 3

1 2 3

1 3 2

1 2 1

1 3 1

Sample Output

Yes

Yes

No
 
   
这里的能量就相当于距离了。
 
   
View Code
#include "iostream"

using namespace std;

#define size 201

int abs(int x)

{

    return x>=0?x:-x;

}

int main()

{

    int n, q, f[size][size];

    while(cin>>n>>q)

    {

        int i, j, k;

        int p[size];

        for(i=0; i<n; i++)

            cin>>p[i];

        for(i=0; i<n; i++)

            for(j=0; j<n; j++)

                f[i][j] = abs(p[i]-p[j])*abs(i-j);

        for(k=0; k<n; k++)

            for(i=0; i<n; i++)

                for(j=0; j<n; j++)

                    if(f[i][k]+f[k][j]<f[i][j])

                        f[i][j] = f[i][k]+f[k][j];

        while(q--)

        {

            int s, e, m;

            cin>>s>>e>>m;

            if(f[s-1][e-1]<=m)

                cout<<"Yes"<<endl;

            else

                cout<<"No"<<endl;

        }

    }

    return 0;

}
 
   

 

 

你可能感兴趣的:(floyd)