SSLOJ 买装备 5月11日提高B组 T1

题目大意:

mxy 沉迷于一个辣鸡游戏不可自拔。
为了加强角色的实力,mxy 决定重新买一套装备。已知现在有 n 件装备,每件装备会
ᨀ供一定的物理抗性和魔法抗性,并需要一定的价钱。mxy 想要保证至少有 a 的物抗和 b
的魔抗,请你计算出满足条件所需的最少金额。(装备不可重复购买)

解题思路:

f[i,j]表示物抗为i魔抗为j时最小的金额数。

对当前(ai,bi,mi)f[i+ai,j+bi]=min{f[i,j]+mi};

如果i+ai大于A,则将f[i+ai]更新到f[a]中去,j同理。

A c c e p t e d   c o d e : Accepted\ code:

#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

const int N = 1005;

int a, b, n;
int w[N], m[N], v[N], f[105][105];

int main() {
	scanf("%d %d\n%d", &a, &b, &n);
	for (int i = 1; i <= n; ++i)
		scanf("%d %d %d", &w[i], &m[i], &v[i]);
	memset(f, 127 / 3, sizeof f);
	f[0][0] = 0;
	for (int i = 1; i <= n; ++i)
	    for (int j = a; j >= 0; --j)
	    	for (int k = b; k >= 0; --k) {
	    		int x = j + w[i];
	    		int y = k + m[i];
	    		x = min(x, a); y = min(y, b);
				f[x][y] = min(f[x][y], f[j][k] + v[i]);
			}
	printf("%d", f[a][b]);	
}

猜你喜欢

转载自blog.csdn.net/qq_39798042/article/details/90299288
今日推荐