原题链接:公交汽车
动态规划问题
第一步确定状态
第二步写出转移方程
第三步确定初始条件和边界情况
第四步是计算顺序的确定
下面直接看代码
#include<stdio.h>
#define max 10000;
int min(int a,int b){
return a<b?a:b;
}
int main(){
int i,j,n,l;
int a[10];
for(i = 0; i < 10; i++){
scanf("%d",&a[i]);
}
scanf("%d",&n);
//dp[i] 行走i公里所需要的最少费用,因为数组是从0开始,所以要数组元素设成n+1
int dp[n+1];
//dp[0]表示初始状态,走了0公里,所以费用为0
dp[0] = 0;
//因为dp[i]需要依靠前面所确定的最小费用来确定,所以顺序是从i到n。
for(i = 1; i <= n; i++){
dp[i] = max;
for(j = 0; j < 10; j++){
l = j + 1;
if(i >= l){
//状态方程
dp[i] = min(dp[i-l]+a[j],dp[i]);
}
}
}
//最后求得的dp[n]即为答案
printf("%d",dp[n]);
}
第一次写题解,讲的不是很清楚大家多多包涵,有关动态规划的问题可以多去b站上看相关视频,我也是先在b站上看了相关视频才来这里做的,一开头写的那四步是求这类动态规划题目的基本思路。
9.9 分
7 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复