P1796 汤姆斯的天堂梦
题目描述
汤姆斯生活在一个等级为 00 的星球上。那里的环境极其恶劣,每天 1212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NN 的星球上天堂般的生活。
有一些航班将人从低等级的星球送上高一级的星球,有时需要向驾驶员支付一定金额的费用,有时却又可以得到一定的金钱。
汤姆斯预先知道了从 00 等级星球去 NN 等级星球所有的航线和需要支付(或者可以得到)的金钱,他想寻找一条价格最低(甚至获得金钱最多)的航线。
输入格式
第一行一个正整数 NN(N \le 100N≤100),接下来的数据可分为 NN 个段落,每段的第一行一个整数 K_iKi(K_i \le 100Ki≤100),表示等级为 ii 的星球有 K_iKi 个。
接下来的 K_iKi 行中第 jj 行依次表示与等级为 ii,编号为 jj 的星球相连的等级为 i - 1i−1 的星球的编号和此航线需要的费用(正数表示支出,负数表示收益,费用的绝对值不超过 10001000)。
每行以 00 结束,每行的航线数 \le 100≤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 \%100% 的数据,1 \le N \le 1001≤N≤100,1 \le K_i \le 1001≤Ki≤100。
样例解释:
这道题没看图直接看题目看了好久才弄明白数据的含义(太菜,人麻了),先翻译一下输入数据含义
数据分为3个段落
等级为1的星球有2个
与等级为1,编号为1的星球相连的等级为0的星球的编号和航班需要的费用分别为1,15
与等级为1,编号为2的星球相连的等级为0的星球的编号和航班需要的费用分别为1,5
等级为2的星球有3个
与等级为2,编号为1的星球相连的等级为1的星球的编号和航班需要的费用分别为1,-5
与等级为2,编号为1的星球相连的等级为1的星球的编号和航班需要的费用分别为2,10
与等级为2,编号为2的星球相连的等级为1的星球的编号和航班需要的费用分别为1,3
与等级为2,编号为3的星球相连的等级为1的星球的编号和航班需要的费用分别为2,40
等级为3的星球有2个
与等级为3,编号为1的星球相连的等级为2的星球的编号和航班需要的费用分别为1,1
与等级为3,编号为1的星球相连的等级为2的星球的编号和航班需要的费用分别为2,5
与等级为3,编号为1的星球相连的等级为2的星球的编号和航班需要的费用分别为3,5
与等级为3,编号为2的星球相连的等级为2的星球的编号和航班需要的费用分别为2,-19
与等级为3,编号为2的星球相连的等级为2的星球的编号和航班需要的费用分别为3,-20
看到提示的图可以用动态规划来求解,找到状态转移方程:f[i][j] = min(f[i][j], f[i - 1][num] + w)
i表示等级,j是编号,取第i-1级编号为num的星球到第i级编号为j的星球费用的最小值,f[i][j]表示i-1级星球到i级编号为j的星球的费用
#include<bits/stdc++.h>
using namespace std;
int f[103][103],ans,n,INF=0x3f3f3f3f;
int main()
{
cin >> n;
int k,num,w;
for (int i = 1; i <= n; i++) {//等级
cin >> k;
for (int j = 1; j <= k; j++)//编号
{
f[i][j] = INF;
cin >> num;
while (num != 0)//结束条件
{
cin >> w;
f[i][j] = min(f[i][j], f[i - 1][num] + w);
cin >> num;
}
}
}
ans = INF;
for (int i = 1; i <= k; i++)//k此时的值是最后一级星球个数
ans = min(ans, f[n][i]);//取倒数第二级星球到最后一级星球费用的最小值
cout << ans;
return 0;
}
P1806 跑步
题目描述
路人甲准备跑 nn 圈来锻炼自己的身体,他准备分多次(\gt1>1)跑完,每次都跑正整数圈,然后休息下再继续跑。
为了有效地提高自己的体能,他决定每次跑的圈数都必须比上次跑的多。
可以假设他刚开始跑了 00 圈,那么请问他可以有多少种跑完这 nn 圈的方案?
输入格式
一行一个整数,代表 nn。
输出格式
一个整数表示跑完这 nn 圈的方案数。
输入输出样例
输入 #1复制

本文介绍了几个基于动态规划的编程竞赛题目,包括寻找最低费用的航线、计算跑步圈数的方案、砝码称重问题以及环境治理中的道路改善策略。每个问题都解析了状态转移方程并提供了相应的代码实现。
最低0.47元/天 解锁文章
361

被折叠的 条评论
为什么被折叠?



