社区讨论
求助 50pts
P1270“访问”美术馆参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo7l36qc
- 此快照首次捕获于
- 2023/10/27 03:35 2 年前
- 此快照最后确认于
- 2023/10/27 03:35 2 年前
CPP
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
int W[20005];
int T[20005];
vector<int> sons[20005];
int cnt = 0;
int dp[20005][700];
int ch[20005];
int s;
void input(int fa){
int tt = cnt;
cnt++;
int a,b;
cin >> a >> b;
if(fa!=-1){
sons[fa].push_back(tt);
}
a*=2;
if(b!=0) ch[tt] = 1;
T[tt] = a;
W[tt] = b;
if(b==0){
input(tt);
input(tt);
}
}
void print(int x){
if(sons[x].size()>=1) print(sons[x][0]);
cout << T[x] << endl;
if(sons[x].size()>=2) print(sons[x][1]);
}
void dfs(int x){
if(ch[x]){
for(int i = 0; i<=s-T[x]; i++){
dp[x][i+T[x]] = (i/5 <= W[x])? i/5 : W[x];
}
return;
}
for(int i = 0; i<sons[x].size(); i++){
int y = sons[x][i];
dfs(y);
for(int j = s; j>=T[y]; j--){
for(int k = 0; k<=j-T[y]; k++)
dp[x][j] = max(dp[x][j], dp[x][j-k] + dp[y][k]);
}
}
}
int main() {
cin >> s;
s--;
input(-1);
dfs(0);
cout << dp[0][s] << endl;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...