国产探花免费观看_亚洲丰满少妇自慰呻吟_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]);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮滨县| 金溪县| 克什克腾旗| 潼关县| 巴林右旗| 互助| 金华市| 濮阳市| 梨树县| 江源县| 岳池县| 武城县| 高碑店市| 中方县| 南溪县| 呼图壁县| 丹寨县| 梅河口市| 沁水县| 濉溪县| 交城县| 罗平县| 沂水县| 安达市| 临沂市| 凤山市| 河池市| 丹阳市| 上杭县| 蛟河市| 新密市| 襄城县| 东丽区| 邓州市| 阳山县| 虞城县| 前郭尔| 天台县| 日照市| 松江区| 金乡县|