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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[Codeforces 814D] An overnight dance in discotheque 树形dp,贪心

發布時間:2024/3/24 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Codeforces 814D] An overnight dance in discotheque 树形dp,贪心 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

題解:這道題,首先可以發現,圓與圓關系只有內含與外離,

??????????? 所以可以建立出一個樹形結構,

??????????? 每個圓的父親是與這個圓半徑相差最小且包含這個圓的圓,

??????????? 這樣,整個一張圖形成了一個森林,可以將圓按半徑排序后O(n^2)建立出來。

Solution 1 :? 可以對這個森林進行樹形dp,

????????????????????? 因為需要將森林分成兩個部分,

????????????????????? 而且容易發現,對于新形成的森林,深度為奇數的圓貢獻為S,偶數為-S,

????????????????????? 于是對于每棵樹分別dp,

????????????????????? f[i][0/1][0/1]表示以i為根,2個01變量分別表示到達i時兩棵樹的深度的奇偶性,

????????????????????? 顯然,因為是樹上深度相關,這兩個01變量應該從根到兒子進行轉移,

????????????????????? 通過枚舉在i位置的選擇,dp數組的求解由兒子到根進行轉移。

????????????????????? (這么設狀態可以保證兒子對父親的貢獻總是為正,如果兒子對父親貢獻出現負值,就不符合dp的最優子結構性質了)

????????????????????? (菜雞博主開始設置的狀態會使兒子對父親的貢獻可能為負,所以導致比賽時GG?? 我好菜啊高清重置版)

Code:

#include <bits/stdc++.h> #define eps 1e-12 double pi=acos(-1.0); using namespace std; struct node {double x,y,r; }t[1005]; int n; int fa[1005]; double f[1005][2][2]; vector <int> vec[1005]; inline bool cmp(node a,node b) {return a.r>b.r;} void dfs(int pos) {if (vec[pos].size()==0) {f[pos][0][0]=-t[pos].r*t[pos].r*pi; f[pos][1][1]=t[pos].r*t[pos].r*pi; f[pos][0][1]=t[pos].r*t[pos].r*pi; f[pos][1][0]=t[pos].r*t[pos].r*pi; return; } /* f[pos][0][0]=-t[pos].r*t[pos].r*pi; f[pos][0][1]=-t[pos].r*t[pos].r*pi; f[pos][1][0]=t[pos].r*t[pos].r*pi; f[pos][1][1]=t[pos].r*t[pos].r*pi; f[pos][0][0]=-t[pos].r*t[pos].r*pi; f[pos][0][1]=t[pos].r*t[pos].r*pi; f[pos][1][0]=-t[pos].r*t[pos].r*pi; f[pos][1][1]=t[pos].r*t[pos].r*pi; */ double s[2][2]; memset (s,0,sizeof(s)); for (int i=0;i<vec[pos].size();i++) {dfs(vec[pos][i]); int son=vec[pos][i]; s[0][0]+=f[son][0][0]; s[0][1]+=f[son][0][1]; s[1][0]+=f[son][1][0]; s[1][1]+=f[son][1][1]; } double siz=t[pos].r*t[pos].r*pi; f[pos][0][0]=max(s[0][1]-siz,s[1][0]-siz); f[pos][1][0]=max(s[0][0]+siz,s[1][1]-siz); f[pos][1][1]=max(s[0][1]+siz,s[1][0]+siz); f[pos][0][1]=max(s[0][0]+siz,s[1][1]-siz); } int main (){int i,j;scanf ("%d",&n);for (i=1;i<=n;i++){scanf ("%lf%lf%lf",&t[i].x,&t[i].y,&t[i].r);}sort(t+1,t+n+1,cmp);for (i=1;i<=n;i++){for (j=i-1;j>=1;j--){if (((t[i].x-t[i].r)+eps>t[j].x-t[j].r)&&((t[i].x+t[i].r)-eps<t[j].x+t[j].r)&&((t[i].y-t[i].r)+eps>t[j].y-t[j].r)&&((t[i].y+t[i].r)-eps<t[j].y+t[j].r)){vec[j].push_back(i);fa[i]=j;break;}}}double ans=0;for (i=1;i<=n;i++){if (!fa[i]){dfs(i);double maxn=-1e18;ans+=f[i][1][1];}}printf ("%.12lf\n",ans);return 0; }

Solution 2:? 非常妙的貪心,建出樹之后,????????? ?????? ? ?

對于樹上某個位置i,只要能夠使它的貢獻為正,就讓它貢獻為正數。??????? ? ? ? ? ? ??

正確性:對于每個圓,若使它貢獻為正,與讓它貢獻為負時相比,答案相差了2*Si.?????? ? ? ? ? ?? ??

而對于這個圓所對應的子樹的選擇,整個子樹對于答案的貢獻不會小于-Si,也不會大于Si,?????????????????? ?

所以顯然這種情況下讓這個圓貢獻為正所取得的收益更大,所以貪心是正確的。

Code:

#include <bits/stdc++.h> #define eps 1e-12 double pi=acos(-1.0); using namespace std; struct node {double x,y,r; }t[1005]; inline bool cmp(node a,node b) {return a.r>b.r;} int n; int fa[1005],dep[1005]; int main (){int i,j;scanf ("%d",&n);for (i=1;i<=n;i++){scanf ("%lf%lf%lf",&t[i].x,&t[i].y,&t[i].r);}sort(t+1,t+n+1,cmp);for (i=1;i<=n;i++){for (j=i-1;j>=1;j--){if (((t[i].x-t[i].r)+eps>t[j].x-t[j].r)&&((t[i].x+t[i].r)-eps<t[j].x+t[j].r)&&((t[i].y-t[i].r)+eps>t[j].y-t[j].r)&&((t[i].y+t[i].r)-eps<t[j].y+t[j].r)){fa[i]=j;break;}}}double ans=0;dep[0]=0;for (i=1;i<=n;i++){dep[i]=dep[fa[i]]+1;}for (i=1;i<=n;i++){if (dep[i]<=2||dep[i]%2==0) {ans+=pi*t[i].r*t[i].r;}else {ans-=pi*t[i].r*t[i].r;}}printf ("%.12lf\n",ans);return 0; }


總結

以上是生活随笔為你收集整理的[Codeforces 814D] An overnight dance in discotheque 树形dp,贪心的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91av片| 西西大胆午夜视频 | 天天色天天射综合网 | 亚洲成人精品久久久 | 轮乱| 中国女人内96xxxxx | 韩国av在线| 成人影视免费观看 | 国产一区二区三区高清 | 欧美播放| 女人高潮娇喘声mp3 乱色视频 | 欧美精品一区在线 | 哪里可以免费看av | 亚洲性天堂 | 国内久久精品视频 | 国产欧美一区二区精品性色 | 女人扒开腿免费视频app | 色天天天| 一边吃奶一边摸做爽视频 | 中文字幕高清在线观看 | 日韩大片在线观看 | 美女免费毛片 | 天天av天天操 | 国产又粗又猛又黄又爽无遮挡 | 国产日韩精品在线观看 | 国产一级在线免费观看 | 亚洲国产精品久久久久久 | 色老大视频 | 波多野av在线 | 日本三级中国三级99人妇网站 | 国产色视频网站 | 亚洲伊人精品 | 国产免费福利视频 | 超碰蜜臀 | 免费av片| 免费观看一区二区三区视频 | 日韩羞羞| 97视频网址| 日韩一区在线观看视频 | 精品视频在线观看 | 97精品 | 中文字幕人成人乱码亚洲电影 | 欧美一二级 | 性感av在线 | 日本黄色一级 | 四虎精品久久 | 女厕厕露p撒尿八个少妇 | 性xxx18| 无遮挡又爽又刺激的视频 | 国产精品一区二区免费视频 | 精品国产乱码久久久久久闺蜜 | 国产资源av | 久久综合久色欧美综合狠狠 | 久久精品色欲国产AV一区二区 | 欧美一区二区免费视频 | 伊人久久亚洲 | 国产中文一区二区三区 | 一区二区三区国产在线 | 久久久久久9999 | 亚洲av永久纯肉无码精品动漫 | 成人影院免费 | 精品一区在线观看视频 | 又粗又猛又爽又黄少妇视频网站 | av永久免费网站 | 欧美有码视频 | 麻豆影视在线免费观看 | 人妻天天爽夜夜爽一区二区三区 | 久久国产片 | 伊人久久色 | 黑人与日本少妇 | 在线美女av| 精品人妻少妇一区二区三区 | 毛茸茸成熟亚洲人 | 国产精品对白刺激久久久 | 亚洲av熟女国产一区二区性色 | 日韩福利网 | 国产精品无码久久久久久电影 | 少妇肥臀大白屁股高清 | 天天拍夜夜拍 | 日日操天天操夜夜操 | 久久精品成人av | 疯狂做爰的爽文多肉小说王爷 | 噜噜噜亚洲色成人网站 | 亚洲欧美另类日韩 | 色啪综合 | 色网av| 国产免费的av | 男女裸体影院高潮 | 成人手机看片 | 性色欲网站人妻丰满中文久久不卡 | 丰满人妻av一区二区三区 | 日韩一区二区精品 | 午夜视频在线观看免费视频 | 午夜激情福利在线 | 在线观看污| 欧美日韩激情在线一区二区三区 | 今天最新中文字幕mv高清 | 在线观看中文 | 69堂视频|