哪里有问题啊(求帮助)

P1270 “访问”美术馆

```cpp #include <bits/stdc++.h> #define N 10005 using namespace std; struct tree{ int l,r,tm,w; tree() { l=r=-1; } }t[N]; int TIME,num,dp[N][N]={0},fa[N]; void plant(int n,int status) { int p,now; num++; scanf("%d%d",&t[num].tm,&t[num].w); t[num].tm*=2; if(status==0) t[n].l=num,fa[num]=n; else if(status==1) t[n].r=num; now=num; if(t[now].w==0) { plant(now,0); plant(now,1); } return; } int dfs(int x,int time) { time-=t[x].tm; if(x==-1|| time<=0) return 0; if(dp[x][time]>0) return dp[x][time]; //cout<<x<<endl; for(int i=0;i<=time;i++) { int u=dfs(t[x].l,i); int v=dfs(t[x].r,time-i); //cout<<x<<" "<<u<<" "<<v<<endl; if(u+v+t[x].w>dp[x][time]&&time-t[x].w*5>=0) dp[x][time]=u+v+t[x].w; } return dp[x][time]; } int main() { freopen("gallery.in","r",stdin); freopen("gallery.out","w",stdout); scanf("%d",&TIME); num=0; plant(1,0); cout<<dfs(1,TIME-1); /*for(int i=1;i<=num;i++) { cout<<i<<" "<<t[i].tm<<" "<<t[i].w<<endl; if(t[i].l>-1) cout<<"l:"<<t[i].l<<" "; if(t[i].r>-1) cout<<"r:"<<t[i].r<<endl; }*/ return 0; } ```
by pip202513 @ 2023-07-13 09:46:07


ywaq
by ___LOSER___ @ 2023-07-13 09:47:50


75(记忆话搜索) ```cpp #include <bits/stdc++.h> #define N 10005 using namespace std; struct tree{ int l,r,tm,w; tree() { l=r=-1; } }t[N]; int TIME,num,dp[N][N]={0},fa[N]; void plant(int n,int status) { int p,now; num++; scanf("%d%d",&t[num].tm,&t[num].w); t[num].tm*=2; if(status==0) t[n].l=num,fa[num]=n; else if(status==1) t[n].r=num; now=num; if(t[now].w==0) { plant(now,0); plant(now,1); } return; } int dfs(int x,int time) { time-=t[x].tm; if(x==-1|| time<=0) return 0; if(dp[x][time]>0) return dp[x][time]; //cout<<x<<endl; for(int i=0;i<=time;i++) { int u=dfs(t[x].l,i); int v=dfs(t[x].r,time-i); //cout<<x<<" "<<u<<" "<<v<<endl; if(u+v+t[x].w>dp[x][time]&&time-t[x].w*5>=0) dp[x][time]=u+v+t[x].w; } return dp[x][time]; } int main() { //freopen("gallery.in","r",stdin); //freopen("gallery.out","w",stdout); scanf("%d",&TIME); num=0; plant(1,0); cout<<dfs(1,TIME-1); /*for(int i=1;i<=num;i++) { cout<<i<<" "<<t[i].tm<<" "<<t[i].w<<endl; if(t[i].l>-1) cout<<"l:"<<t[i].l<<" "; if(t[i].r>-1) cout<<"r:"<<t[i].r<<endl; }*/ return 0; } ```
by pip202513 @ 2023-07-13 09:47:57


|