0pts求助
查看原帖
0pts求助
895690
gghack_Nythix楼主2024/6/30 21:24

rt。

#include<iostream>
#include<vector>
#define lid (id << 1)
#define rid (id << 1 | 1)
#define int long long
using namespace std;
int tme,cur = 1;
int dp[1005][7005],c[1005],w[1005];
vector< int > g[200005];
void input(){
	int C,W;
	cin >> C >> W;
#define pb push_back
	c[cur] = C,w[cur] = W;
	if(W) return ;
	int rot = cur;
	++cur;
	g[rot].pb(cur);
	input();
	++cur;
	g[rot].pb(cur);
	input();
}
int dfs(int id,int left){
	if(dp[id][left] > 0 || left == 0)return dp[id][left];
	if(w[id]) return dp[id][left] = max(min(w[id],(left - c[id]) / 5),0ll);
	for(int i = 0;i <= left - c[id];++i){
		dp[id][left] = max( dp[id][left] , dfs(g[id][0],i) + dfs(g[id][1],left - c[id] - i) );
	}
	return dp[id][left];
}
signed main(){
	cin >> tme;--tme;
	input();
	cout << dfs(1,tme);
	return 0;
}

不懂哪里出问题了。

2024/6/30 21:24
加载中...