记忆化搜索30分求调,WA
查看原帖
记忆化搜索30分求调,WA
1159190
Ci15876399260楼主2024/11/29 14:43
#include<bits/stdc++.h>

using namespace std;

const int maxn = 105;

int w[maxn] , v[maxn];
int t , m;
long long dp[maxn][maxn];

long long dfs(int i , int j){
	if(i == m) return 0;
	if(dp[i][j] != -1) return dp[i][j]; 
	long long ans = 0;
	if(j >= w[i]){
		ans = max(dfs(i + 1 , j) , dfs(i + 1 , j - w[i]) + v[i]);
	}
	else ans = dfs(i + 1 , j);
	dp[i][j] = ans;
	return ans;
}

int main(){
	memset(dp , -1 , sizeof(dp));
	cin >> t >> m;
	for(int i = 0 ; i < m ; i++){
		cin >> w[i] >> v[i];
	}
	cout << dfs(0 , t) << endl; 
	return 0;
}
2024/11/29 14:43
加载中...