SSLOJはグループB T1 5月11日を改善するための機器を購入します

効果の件名:

MXYは、自分自身を救い出すことができないスパイシーなチキンゲームにふけます。
文字の強度を高めるために、MXYは、機器のセットを購入することを決めました。今、機器のn個を有することが知られ、各機器にはなります
特定の物理的抵抗と魔法抵抗のためにᨀ、および特定の価格が必要です。MXYは抗Bとの少なくとも問題があることを確認したい
魔法抵抗、あなたは条件を満たすために必要な最小量を計算します。(機器の購入を繰り返していません)

問題解決のアイデア:

F [I、J]場合、抗J量マジック数に対する最小値はIで表します。

对当前(AI、BI、MI)はfが{[I、J] + MI F} =分[iがAI、J +双方向+]。

私はAIがAよりも大きい+場合は、F [A]、Jの共感を行くFまでの更新[私は愛を+]。

A C C E P トン E D   C インクルード D E 受け入れ\コード:

#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