前言
第6次发csdn,心情还是有些许的激动
逮虾户
你现在开车在一条狭长的直道上,你想用 t 秒的时间,恰好行驶 d 米的距离。
最开始车是静止不动的,也就是说车速是 0 (m/s)
在每个整数秒的时间点上( 包括最开始的 0 时刻),你可以选择任意一个非负整数 x ,然后把车速瞬间增加 x (m/s),这样会消耗你 x2 单位的油 。 每个整数秒的时间点上 ,你只能选择一次 。
问你最少需要多少单位的油 。
Input
输入只有一行,包括两个正整数 t 和 d
Output
输出一行,包含一个整数,代表答案
Example
1、
input:4 10 output : 4
2、
input:5 33 output : 21
3、
input:1 30000 output : 900000000
设计递归函数
通过 递归函数 遍历每一种情况,然后得出最少用油量
即尝试各种加速情况,将符合要求的情况中的用油量作比较,最终输出最少用油量
*以下为部分代码,文章最后将给出完整程序
void run(int t,int s,int v,int oil,int &minOil){
if(t==0) goto part1;
int aMax;
aMax=s/t;
t--;
int nv,ns,no;
for (int i=0;i<=aMax;i++){
nv=v+i;
ns=s;
no=oil;
if((ns-nv)>=0){
no=oil+(i*i);
ns-=nv;
run(t,ns,nv,no,minOil);
}
}
part1:
if(t==0 && s==0) {
if (minOil>oil) minOil=oil;
}
}
完整代码
#include <iostream>
#include <cmath>
using namespace std;
void run(int t,int s,int v,int oil,int &minOil){
if(t==0) goto part1;
int aMax;
aMax=s/t;
t--;
int nv,ns,no;
for (int i=0;i<=aMax;i++){
nv=v+i;
ns=s;
no=oil;
if((ns-nv)>=0){
no=oil+(i*i);
ns-=nv;
run(t,ns,nv,no,minOil);
}
}
part1:
if(t==0 && s==0) {
if (minOil>oil) minOil=oil;
}
}
int main()
{
int minOil,t,s,a;
cin>>t>>s;
a=(s/t);
minOil=pow(a,2);
run(t,s,0,0,minOil);
cout<<minOil<<endl;
return 0;
}
以上为全部内容,祝你在学习道路上如履平地 ^_*