小明游天界
首先是
,分别带表有
个景点,有
个单位时间,
个路线
接下来
行,每行三个数,
,代表
到
和
到
需要
个单位时间
求从
到
刚好用了
个时间单位,且经过的景点数最多(可以重复经过某个景点)
样例输入
5 12 4
1 2 5
1 4 3
4 2 4
2 5 5
样例输出
4
思路
DP
代表用
个单位时间到达
点最多经过的景点数。
#include<iostream>
#include<cstdio>
using namespace std;
int f[1010][1010],a[50005][3];
int l,k,n,m;
int main()
{
freopen("d.in","r",stdin);
freopen("d.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=k;++i)
scanf("%d%d%d",&a[i][1],&a[i][2],&a[i][3]);
f[0][1]=1;f[m][n]=-1;
for (int i=1;i<=m;++i)
for(int j=1;j<=k;++j)
{
if(i-a[j][3]<0)continue;
if(f[i-a[j][3]][a[j][2]]>0)
f[i][a[j][1]]=max(f[i][a[j][1]],f[i-a[j][3]][a[j][2]]+1);
if(f[i-a[j][3]][a[j][1]]>0)
f[i][a[j][2]]=max(f[i][a[j][2]],f[i-a[j][3]][a[j][1]]+1);
}
printf("%d",f[m][n]);
fclose(stdin);
fclose(stdout);
}