diff --git a/HDOJ/1011_autoAC.cpp b/HDOJ/1011_autoAC.cpp new file mode 100644 index 0000000..1b6b4bc --- /dev/null +++ b/HDOJ/1011_autoAC.cpp @@ -0,0 +1,64 @@ +#include +#include +using namespace std; +#include +int roomNumber,trooperNumber; +vector path[101]; +int dp[101][101]; +bool visited[101]; +int cost[101]; +int max(int a,int b) +{ + return a>b?a:b; +} +void solve(int deep) +{ + visited[deep]=true; + for (int i=0;i=cost[deep];j--) + for (int index=1;index+j<=trooperNumber;index++) + if(dp[value][index]) + dp[deep][j+index]=max(dp[deep][j+index],dp[deep][j]+dp[value][index]); + } +} +int main() +{ + while (scanf("%d%d",&roomNumber,&trooperNumber)!=EOF) + { + if(roomNumber==-1&&trooperNumber==-1) + break; + for (int i=0;i<=roomNumber;i++) + { + path[i].clear(); + } + memset(dp,0,sizeof(dp)); + memset(visited,0,sizeof(visited)); + int tempA; + for(int i=1;i<=roomNumber;i++) + { + scanf("%d%d",&cost[i],&tempA); + cost[i]=(cost[i]+19)/20; + for (int j=cost[i];j<=trooperNumber;j++) + dp[i][j]=tempA; + } + int tempB; + for(int i=1;i<=roomNumber-1;i++) + { + scanf("%d%d",&tempB,&tempA); + path[tempB].push_back(tempA); + path[tempA].push_back(tempB); + } + if(trooperNumber==0) + printf("0\n"); + else + { + solve(1); + printf("%d\n",dp[1][trooperNumber]); + } + } + return 0; +}