#include<iostream> #include<cstdio> using namespace std; struct in { int t,num; }ter[10000]; int dp[1010][1010],n,t; void init(int ro) { scanf("%d%d",&ter[ro].t,&ter[ro].num); ter[ro].t*=2; if(!ter[ro].num)//因为是dfs序 init(ro*2),init(ro*2+1); } void dfs(int ro) { if(!ter[ro*2].t)//如果没有儿子 { for(int i=0;i<=t;i++) { int ti=max(0,i-ter[ro].t);//枚举这层所用时间 dp[ro][i]=min(ter[ro].num,ti/5);//除5是因为取画需要5s } return; } dfs(ro*2); dfs(ro*2+1); for(int i=0;i<=t;i++)//枚举一共的时间 for(int j=ter[ro].t;j<=i;j++)//枚举在左蛾子花的时间 dp[ro][i]=max(dp[ro][i],dp[ro*2][j-ter[ro].t]+dp[ro*2+1][i-j]); } int main() { scanf("%d",&t); t--; //警察来之前 init(1);//预处理 dfs(1); printf("%d",dp[1][t]); }
看我大晚上还更新博客,多热爱学习