0
点赞
收藏
分享

微信扫一扫

【洛谷】P1509 找啊找啊找GF**(二维价值的01背包)

海牙秋天 2022-03-25 阅读 27

穿越隧道

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 999;
int num[N][N];
int n;
int f[N][N];
int rmb[N],rp[N],ti[N];
int main(){
	cin >> n;
	for(int i = 1; i<= n; i++){
		cin >> rmb[i] >> rp[i] >> ti[i];
	}
	int m,r;
	cin >> m >> r;
	for(int i = 1; i <= n; i++){
		for(int j = m; j >= rmb[i]; j--){
			for(int k = r; k >= rp[i]; k--){
				if(num[j][k] < num[j-rmb[i]][k-rp[i]] + 1){
					num[j][k] = num[j - rmb[i]][k - rp[i]] + 1;
					f[j][k] = f[j - rmb[i]][k - rp[i]] + ti[i];
				}
				else if(num[j][k] == num[j - rmb[i]][k-rp[i]] + 1){
					f[j][k] = min(f[j][k], f[j - rmb[i]][k - rp[i]] + ti[i]);
				}
			}
		}
	} 
	cout << f[m][r] << endl;
	return 0;
}
举报

相关推荐

0 条评论