标签:for 影响 open ace int 答案 double += void
一个裸裸的树形DP。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+5; 4 int n,t,tot,s,a[N],h[N]; 5 int cnt,fro[N],to[N],nxt[N]; 6 inline int read() { 7 int x=0; char c=getchar(); 8 while(c<‘0‘||c>‘9‘) c=getchar(); 9 while(c>=‘0‘&&c<=‘9‘) x=(x<<3)+(x<<1)+c-‘0‘,c=getchar(); 10 return x; 11 } 12 void add(int x,int y) { 13 to[++cnt]=y,nxt[cnt]=fro[x]; fro[x]=cnt; 14 } 15 16 void DP(int u) { 17 if(fro[u]==0) {a[u]=1; return ;} 18 for(int i=fro[u];i;i=nxt[i]) DP(to[i]); 19 tot=0; memset(h,0,sizeof(h)); 20 for(int i=fro[u];i;i=nxt[i]) h[++tot]=a[to[i]]; 21 sort(h+1,h+tot+1); 22 for(int j=1;j<=ceil((double)tot*t/100);j++) a[u]+=h[j]; 23 } 24 25 int main() { 26 // freopen("pa.in","r",stdin); 27 // freopen("pa.out","w",stdout); 28 n=read(),t=read(); 29 for(int i=1;i<=n;i++) { 30 int x=read(); 31 add(x,i); 32 } 33 DP(0); printf("%d",a[0]); 34 }
第二题
理一理思路
1)将人按身高从矮到高排序,按这个顺序处理时无论当前怎么放,都不会对后面更高的产生影响。
2)线段树:表示当前答案序列
标签:for 影响 open ace int 答案 double += void
原文地址:https://www.cnblogs.com/qq8260573/p/10891353.html