POJ 1476 Always On the Run G++ 动态规划dp 巧妙 没掌握
程序员文章站
2022-07-15 11:03:04
...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//英语 看博友分析 抄博友程序 动态规划dp 巧妙 没掌握
int dp[1020][20];//dp[i][k] i表示第多少天,k表示目的地 i天里从城市1 到城市k 的最小花费
int cost[20][20][1020];//cost[j][k][pos]) 第pos天从城市j到城市k的花费
int main()
{
int tag=0;
while(1)
{
tag++;
int n,m;
cin>>n>>m;
if(n==0 && m==0)
{
break;
}
memset(cost,0,sizeof(cost));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)//抄博友程序
{
continue;
}
cin>>cost[i][j][0];
for(int k=1;k<=cost[i][j][0];k++)
{
cin>>cost[i][j][k];
}
}
}
memset(dp,0x3f,sizeof(dp));
dp[0][1]=0;
for(int k=1;k<=m;k++)
{
for(int i=1;i<=n;i++)
{
if(dp[k-1][i]==0x3f3f3f3f)//抄博友程序
{
continue;
}
for(int j=1;j<=n;j++)
{
if(i==j)
{
continue;
}
int pos=k%cost[i][j][0];//巧妙
if(pos==0)
{
pos=cost[i][j][0];
}
if(cost[i][j][pos]==0)//题意 抄博友程序
{
continue;
}
dp[k][j]=min(dp[k][j],dp[k-1][i]+cost[i][j][pos]);//抄博友程序 背 没掌握
}
}
}
cout<<"Scenario #"<<tag<<endl;
if(dp[m][n]==0x3f3f3f3f)
{
cout<<"No flight possible."<<endl;
}else
{
cout<<"The best flight costs "<<dp[m][n]<<"."<<endl;
}
cout<<endl;
}
return 0;
}
上一篇: java.util.Arrays