日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

三分法解决凸(凹)函数极值问题

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三分法解决凸(凹)函数极值问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二分法只適用與線性函數,當函數脫離線性而呈現凸性或者凹性的時候,三分是很有必要的。

三分過程如下圖:

凸函數:

凹函數:

實現方法:

double Calc(double p) {/*...*/ }double Solve(double MIN, double MAX) {double Left, Right;double mid, midmid;double mid_area = 0, midmid_area = 0; //***Left = MIN; Right = MAX;while (Left + eps < Right) {mid = (Left + Right) / 2;midmid = (mid + Right) / 2;mid_area = Calc(mid);midmid_area = Calc(midmid);if (midmid_area - mid_area > eps) Right = midmid;else Left = mid;}return mid_area; }

?

?

??

?例題:HDU?4355 ( Party All the Time )?

?

View Code #include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #include <string> #include <set> #include <ctime> #include <queue> #include <map> #include <sstream>#define CL(arr, val) memset(arr, (val), sizeof(arr)) #define REP(i, n) for((i) = 0; (i) < (n); ++(i)) #define FOR(i, l, h) for((i) = (l); (i) <= (h); ++(i)) #define FORD(i, h, l) for((i) = (h); (i) >= (l); --(i)) #define L(x) (x) << 1 #define R(x) (x) << 1 | 1 #define MID(l, r) ((l) + (r)) >> 1 #define Min(x, y) (x) < (y) ? (x) : (y) #define Max(x, y) (x) < (y) ? (y) : (x) #define E(x) (1 << (x)) #define iabs(x) ((x) > 0 ? (x) : -(x))typedef long long LL; const double eps = 1e-6; const double inf = 1000000000;using namespace std;const int N = 50010;struct node {double p;double w; } q[N];int n;double Calc(double p) {double tmp = 0, d;for(int i = 0; i < n; ++i) {d = abs(q[i].p - p);tmp += d*d*d*q[i].w;}return tmp; }double Solve(double MIN, double MAX) {double Left, Right;double mid, midmid;double mid_area = 0, midmid_area = 0;Left = MIN; Right = MAX;while (Left + eps < Right) {mid = (Left + Right) / 2;midmid = (mid + Right) / 2;mid_area = Calc(mid);midmid_area = Calc(midmid);if (midmid_area - mid_area > eps) Right = midmid;else Left = mid;}//printf("%.10f\n", mid_area);return mid_area; }int main() {//freopen("data.in", "r", stdin);int t, j, cas = 0;double mx, mi;scanf("%d", &t);while(t--) {scanf("%d", &n);mx = -inf, mi = inf;for(j = 0; j < n; ++j) {scanf("%lf%lf", &q[j].p, &q[j].w);if(mx < q[j].p) mx = q[j].p;if(mi > q[j].p) mi = q[j].p;}double ans = Solve(mi, mx) + 0.5;printf("Case #%d: %d\n", ++cas, int(ans));}return 0; }

?

?POJ 3301

方法,對坐標系進行(0, 180]度的旋轉,然后每個點得到新的坐標,找到最上面,最下面,最左面和最右面的點,然后就行確定當前旋轉角度的面積。

x' = x*cos(th) + y*sin(th);

y' = y*cos(th) - x*sin(th);

View Code //#pragma comment(linker,"/STACK:327680000,327680000") #include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #include <string> #include <set> #include <functional> #include <numeric> #include <sstream> #include <stack> #include <map> #include <queue>#define CL(arr, val) memset(arr, val, sizeof(arr)) #define REP(i, n) for((i) = 0; (i) < (n); ++(i)) #define FOR(i, l, h) for((i) = (l); (i) <= (h); ++(i)) #define FORD(i, h, l) for((i) = (h); (i) >= (l); --(i)) #define L(x) (x) << 1 #define R(x) (x) << 1 | 1 #define MID(l, r) (l + r) >> 1 #define Min(x, y) (x) < (y) ? (x) : (y) #define Max(x, y) (x) < (y) ? (y) : (x) #define E(x) (1 << (x)) #define iabs(x) (x) < 0 ? -(x) : (x) #define OUT(x) printf("%I64d\n", x) #define Read() freopen("data.in", "r", stdin) #define Write() freopen("data.out", "w", stdout);typedef long long LL; const double eps = 1e-8; const double pi = acos(-1.0); const double inf = ~0u>>2;using namespace std;const int N = 50;struct node {double x, y; }p[N];int n;double Calc(double th) {double l = inf, r = -inf, d = inf, u = -inf;double xx, yy, t;for(int i = 0; i < n; ++i) {t = th*pi/180.0;xx = p[i].x*cos(t) + p[i].y*sin(t);yy = p[i].y*cos(t) - p[i].x*sin(t);l = min(l, xx); d = min(d, yy);r = max(r, xx); u = max(u, yy);}return max((r - l)*(r - l), (u - d)*(u - d)); }double Solve(double MIN, double MAX) {double Left, Right;double mid, midmid;double mid_area = 0, midmid_area = 0;Left = MIN, Right = MAX;while(Left + eps < Right) {mid = (Left + Right) / 2.0;midmid = (mid + Right) / 2.0;mid_area = Calc(mid);midmid_area = Calc(midmid);if(midmid_area - mid_area > eps) Right = midmid;else Left = mid;}return mid_area; }int main() {//Read();int T, i;scanf("%d", &T);while(T--) {scanf("%d", &n);for(i = 0; i < n; ++i) scanf("%lf%lf", &p[i].x, &p[i].y);printf("%.2f\n", Solve(0, 180));}return 0; }

?

?

??

??

?

轉載于:https://www.cnblogs.com/vongang/archive/2012/10/30/2745988.html

總結

以上是生活随笔為你收集整理的三分法解决凸(凹)函数极值问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久热精品在线 | 成人公开视频 | 欧美黄色a视频 | 在线观看福利网站 | 一二区在线视频 | 名人明星三级videos | 欧美精品videos另类 | 91破处视频 | 午夜丁香婷婷 | 成人四色 | 欧美日韩综合 | 欧美一级性片 | 久久久精彩视频 | 欧美日韩国产亚洲一区 | 免费毛片观看 | 国产一区二区波多野结衣 | 无遮挡aaaaa大片免费看 | 91在线观看喷潮 | 精品国产乱码久久久久夜深人妻 | 丁香花高清在线观看完整动漫 | 久久麻豆av | 成人尹人| 99精品无码一区二区 | 精品视频一二区 | 91天天看 | aaa一区二区三区 | 特黄特色大片免费播放器使用方法 | 男女h网站 | 日韩第六页 | 亚洲黄页 | 日本色视频 | 国产一区二区三区久久久 | 国产91一区二区三区 | 中日毛片| 无遮挡在线观看 | 91视频福利 | 欧美3p在线观看 | 成人午夜视频在线观看 | 精品人妻一区二区三区蜜桃视频 | 国产aaa视频 | 色无极亚洲影院 | 国产孕妇孕交大片孕 | 九九在线免费视频 | 夜夜夜爽| 在线观看h视频 | 一级片大片 | 成年人免费毛片 | 一级草逼片 | 欧美性受xxxx黑人xyx | 高跟丝袜av| 波多野结衣一二三四区 | 女人床技48动态图 | 中国黄色片子 | 成人小视频在线免费观看 | 亚洲精品国产熟女久久久 | 免费欧美一区 | 在线观看第一页 | 伊人网址 | 在线观看免费视频国产 | 欧美性视频一区二区 | 中文字幕网站 | 成年人精品| 美女黄色影院 | 中文字幕在线免费看 | 久久久久久美女 | 四季av一区二区三区免费观看 | 日本成人a | 97免费观看视频 | 91视频免费在观看 | 狠狠入| exo妈妈mv在线播放高清免费 | 九七影院在线观看免费观看电视 | 国产日韩欧美综合 | jizz一区二区| 亚洲一区二区三区电影在线观看 | 亚洲人午夜射精精品日韩 | 中文字幕看片 | 精品少妇一区二区三区免费观 | 久久精品视频91 | 天天爱天天干天天操 | 韩国一区二区在线观看 | 久久在线视频免费观看 | 黄色av网址在线 | 超碰97最新 | 亚洲中文字幕一区二区 | 快播在线视频 | 色成人亚洲 | 日韩手机在线视频 | 无码人妻精品一区二区蜜桃色欲 | 婷婷五月综合缴情在线视频 | 欧美日韩在线视频免费观看 | 91视频免费在线观看 | 成人免费看片视频 | 高级家教课程在线观看 | 国产一区二区三区四区五区美女 | 在线资源站 | 亚洲免费小视频 | 少妇在线| 99riav国产精品视频 |