hdu5105给你一个方程,让你求极值(直接暴力)
生活随笔
收集整理的这篇文章主要介绍了
hdu5105给你一个方程,让你求极值(直接暴力)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
题意:
给你一个方程f[x] = abss(a * x * x * x + b * x * x + c * x + d);
然后给你各个参数还有x(-100<x<100)的取值范围,然后让你求极大值。
思路:
一开始上来就来了个三分,结果一直wa,其实这个函数可以直接求导,用高中知识得到最值,关键是忘记怎么求了,其实还有一个更猥琐的方法,那就是直接暴力,题目要求是保留两位小数就行,而且x的范围不是很大,所以我们直接暴力x每次增加eps,我的eps=0.0001AC了,没试过再小点行不行,还有就是注意一点,最后别忘了算一下右边界,因为暴力的时候有可能错过右边界,这个地方没注意,WA了一次。
#include<stdio.h>
#define eps 0.0001
double abss(double x)
{
return x > 0 ? x : -x;
}
double fun(double a ,double b ,double c ,double d ,double x)
{
return abss(a * x * x * x + b * x * x + c * x + d);
}
double maxx(double x ,double y)
{
return x > y ? x : y;
}
int main ()
{
double a ,b ,c ,d ,l ,r;
while(~scanf("%lf %lf %lf %lf %lf %lf" ,&a ,&b ,&c ,&d ,&l ,&r))
{
double Ans = 0;
while(l <= r)
{
Ans = maxx(Ans ,fun(a ,b ,c ,d ,l));
l += eps;
}
Ans = maxx(Ans ,fun(a ,b ,c ,d ,r));
printf("%.2lf\n" ,Ans);
}
return 0;
}
给你一个方程f[x] = abss(a * x * x * x + b * x * x + c * x + d);
然后给你各个参数还有x(-100<x<100)的取值范围,然后让你求极大值。
思路:
一开始上来就来了个三分,结果一直wa,其实这个函数可以直接求导,用高中知识得到最值,关键是忘记怎么求了,其实还有一个更猥琐的方法,那就是直接暴力,题目要求是保留两位小数就行,而且x的范围不是很大,所以我们直接暴力x每次增加eps,我的eps=0.0001AC了,没试过再小点行不行,还有就是注意一点,最后别忘了算一下右边界,因为暴力的时候有可能错过右边界,这个地方没注意,WA了一次。
#include<stdio.h>
#define eps 0.0001
double abss(double x)
{
return x > 0 ? x : -x;
}
double fun(double a ,double b ,double c ,double d ,double x)
{
return abss(a * x * x * x + b * x * x + c * x + d);
}
double maxx(double x ,double y)
{
return x > y ? x : y;
}
int main ()
{
double a ,b ,c ,d ,l ,r;
while(~scanf("%lf %lf %lf %lf %lf %lf" ,&a ,&b ,&c ,&d ,&l ,&r))
{
double Ans = 0;
while(l <= r)
{
Ans = maxx(Ans ,fun(a ,b ,c ,d ,l));
l += eps;
}
Ans = maxx(Ans ,fun(a ,b ,c ,d ,r));
printf("%.2lf\n" ,Ans);
}
return 0;
}
总结
以上是生活随笔为你收集整理的hdu5105给你一个方程,让你求极值(直接暴力)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: hdu4122 制作月饼完成订单的最小花
- 下一篇: POJ3762 时间段用k次