蒟蒻求调
  • 板块学术版
  • 楼主roumeideclown
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/4/20 20:40
  • 上次更新2023/10/23 17:57:47
查看原帖
蒟蒻求调
830990
roumeideclown楼主2023/4/20 20:40

站外题

题目描述

某条街上每一公里就有一汽车站,乘车费用如下表:

公里数 1 2 3 4 5 6 7 8 9 10

费用 12 21 31 40 49 58 69 79 90 101

而一辆汽车从不行驶超过10公里。某人想行驶n公里,假设他可以任意次换车,请你帮他找到一种乘车方案使费用最小(10公里的费用比1公里小的情况是允许的)。

输入

第一行为10个不超过100的整数,依次表示行驶1~10公里的费用,相邻两数间用空格隔开;

第二行为某人想要行驶的公里数(1000以内)。

输出

包含一个整数,表示该测试点的最小费用。

样例输入

12 21 31 40 49 58 69 79 90 101

15

样例输出

147

!#^*&(*%&%:一条奇奇怪怪的分割线@%^><{}>{}@#$

我的答辩代码:

#include<bits/stdc++.h>
#pragma GCC optimeze(1)
#pragma GCC optimeze(2)
#pragma GCC optimeze(3,"Ofast","inline")
using namespace std;
int n,w[11],v[11]={0,1,2,3,4,5,6,7,8,9,10},f[11][114514];
int main() {
	for(int i=1;i<=10;i++) {
		scanf("%d",&w[i]);
	}
	scanf("%d",&n);
	for(int i=1;i<=10;i++) {
		for(int j=n;j>=w[i];j--) {
			f[i][j]=min(f[i-1][j],f[i][j-w[i]]+v[i]);
		}
	}
	printf("%d",f[10][n]);
	return 0;
}

2023/4/20 20:40
加载中...