国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

樹形dp-洛谷 P2014 選課

2019-11-08 02:15:25
字體:
來源:轉載
供稿:網友

https://www.luogu.org/PRoblem/show?pid=2014 我一開始想不出來,看了題解后卻發現是最基本的模型 唉~ 這里因為是森林所以我們簡單的把森林合并到一個節點0; f[i][j]表示再i點的子孫里取j個的解; 當然不包括i;

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cstdlib>#include<cmath>#define Ll long longusing namespace std;struct cs{ int to,next,vv;}a[3001];int head[3001],v[3001],f[3001][3001];int n,m,ll,x,y,z,nn;void init(int x,int y){ ll++; a[ll].to=y; a[ll].next=head[x]; head[x]=ll;}int dfs(int x){ f[x][0]=v[x]; if(head[x]==-1)return 1; int sum=0,son; for(int k=head[x];k!=-1;k=a[k].next){ son=dfs(a[k].to); sum+=son; for(int j=sum;j;j--) for(int i=0;i<=son;i++) if(j-i-1>=0)//這個-1,1代表a[k].to節點本身 f[x][j]=max(f[x][j],f[x][j-i-1]+f[a[k].to][i]); } return sum+1;//這個+1,加上想節點自己 }int main(){ memset(head,-1,sizeof head); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d%d",&x,&v[i]); init(x,i); } nn=dfs(0); printf("%d",f[0][m]);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁甸县| 四川省| 仁布县| 南丹县| 钟祥市| 板桥市| 尤溪县| 拜城县| 瑞金市| 建水县| 沙湾县| 楚雄市| 曲靖市| 田东县| 潼南县| 芜湖市| 广西| 桂阳县| 南投市| 高邮市| 新龙县| 南陵县| 平度市| 民权县| 林芝县| 靖州| 察隅县| 离岛区| 兴隆县| 延庆县| 湖州市| 苍南县| 谢通门县| 四会市| 建德市| 苍梧县| 丹寨县| 青河县| 昌宁县| 乳源| 祁连县|