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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

[JSOI2016] 最佳团体(0/1分数规划 + 树形dp)

發布時間:2023/12/3 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [JSOI2016] 最佳团体(0/1分数规划 + 树形dp) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

problem

luogu-P4322

solution

假設每個人是否被招募,用 xi={0,1}x_i=\{0,1\}xi?={0,1} 代替,max?∑pi?xi∑si?xi\max\frac{\sum p_i*x_i}{\sum s_i*x_i}maxsi??xi?pi??xi??。

0/10/10/1 分數規劃標準式子。

二分答案 ans=∑pi?xi∑si?xi?max?∑xi?(pi?ans?si)≥0ans=\frac{\sum p_i*x_i}{\sum s_i*x_i}\Rightarrow \max\sum x_i*(p_i-ans*s_i)\ge 0ans=si??xi?pi??xi???maxxi??(pi??ans?si?)0。

pi?ans?sip_i-ans*s_ipi??ans?si? 重新定為 iii 候選人的價值 valival_ivali?。

樹形 dpdpdp 求選 kkk 個人的最大價值。

f(u,i):f(u,i):f(u,i):uuu 為根的子樹內選了 iii 個人的最大價值。

樹形背包合并即可。f(u,i)=max?{f(u,i?j)+f(v,j)}f(u,i)=\max\{f(u,i-j)+f(v,j)\}f(u,i)=max{f(u,i?j)+f(v,j)}

因為必須 uuu 選了才能選其子樹內的其余點,所以 j≤i?1j\le i-1ji?1 保證必選 uuu

最后因為可能有多個候選人是被 JYYJYYJYY 看上的,所以統一他們的根為 000,判斷 f(0,k+1)f(0,k+1)f(0,k+1) 即可。

code

#include <bits/stdc++.h> using namespace std; #define maxn 2505 int k, n, root; vector < int > G[maxn]; int siz[maxn]; double s[maxn], p[maxn], val[maxn]; double f[maxn][maxn];void dfs( int u ) {f[u][1] = val[u]; siz[u] = 1;for( int v : G[u] ) {dfs( v );siz[u] += siz[v];for( int i = min( siz[u], k + 1 );i;i -- )for( int j = 0;j <= min( siz[v], i - 1 );j ++ )f[u][i] = max( f[u][i], f[u][i - j] + f[v][j] );} }double check( double x ) {for( int i = 1;i <= n;i ++ ) val[i] = p[i] - x * s[i];for( int i = 0;i <= n;i ++ )for( int j = 1;j <= k + 1;j ++ )f[i][j] = -1e9;dfs( 0 ); return f[0][k + 1]; }int main() {scanf( "%d %d", &k, &n );for( int i = 1, fa;i <= n;i ++ ) {scanf( "%lf %lf %d", &s[i], &p[i], &fa );G[fa].push_back( i );}double l = 0, r = 1e4, ans = 0;while( r - l > 1e-4 ) {double mid = (l + r) / 2;if( check( mid ) >= 0 ) ans = mid, l = mid;else r = mid;}printf( "%.3f\n", ans );return 0; }

總結

以上是生活随笔為你收集整理的[JSOI2016] 最佳团体(0/1分数规划 + 树形dp)的全部內容,希望文章能夠幫你解決所遇到的問題。

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