600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > P1796 汤姆斯的天堂梦(动态规划)

P1796 汤姆斯的天堂梦(动态规划)

时间:2022-07-24 16:00:44

相关推荐

P1796 汤姆斯的天堂梦(动态规划)

题目描述

汤姆斯生活在一个等级为0的星球上。那里的环境极其恶劣,每天12小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为N的星球上天堂般的生活。

有一些航班将人从低等级的星球送上高一级的星球,有时需要向驾驶员支付一定金额的费用,有时却又可以得到一定的金钱。

汤姆斯预先知道了从0等级星球去N等级星球所有的航线和需要支付(或者可以得到)的金钱,他想寻找一条价格最低(甚至获得金钱最多)的航线。

输入格式

第一行一个正整数N(N≤100),接下来的数据可分为N个段落每段的第一行一个整数Ki(Ki≤100),表示等级为i的星球有Ki个。

接下来的Ki行中第j行依次表示与等级为i,编号为j的星球相连的等级为i-1的星球的编号和此航线需要的费用(正数表示支出,负数表示收益,费用的绝对值不超过1000)。

每行以0结束,每行的航线数≤100。

输出格式

输出所需(或所得)费用。正数表示支出,负数表示收益。

输入输出样例

输入 #1

3

2

1 15 0

1 5 0

3

1 -5 2 10 0

1 3 0

2 40 0

2

1 1 2 5 3 -5 0

2 -19 3 -20 0

输出 #1

-1

说明/提示

对于100%的数据N≤100 Ki≤100。

样例解释:

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#include<cstdio>#include<math.h>#include<climits>#include <map>using namespace std;int m ,n;int f[200][200] = {0};int main(){cin >> n;for(int i = 1; i <= n; i++) {cin >> m;for(int j = 1; j <= m; j++) {f[i][j] = INT_MAX-1000;int b,c;cin >> b;while(b != 0) {cin >> c;f[i][j] = f[i-1][b]+c<f[i][j]?f[i-1][b]+c:f[i][j];cin >> b;}}}int min = INT_MAX;for(int i = 1; i <= m; i++) {min = f[n][i]<min ? f[n][i]:min;}cout << min;return 0;}

d[j]=min(d[j],t[l]+m);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。