洛谷 P2347 砝碼稱重

傳送門

#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 1000+10
int dp[MAX] = { 0 };//dp[x]表示砝碼總重量爲x時能否湊到,-1表示不能,大於-1表示能
int A[7] = { 0,1,2,3,5,10,20 };
int C[7] = { 0 };
int main() {
	int N = 0;
	for (int i = 1; i <= 6; i++)
		cin >> C[i];
	for (int i = 1; i <= 1000; i++)
		dp[i] = -1;
	dp[0] = 0;
	for (int i = 1; i <= 6; i++) {
		for (int j = 0; j <= 1000; j++) {
			if (dp[j] >= 0)
				dp[j] = C[i];
			else
				dp[j] = -1;
		}
		for (int j = 0; j <= 1000 - A[i]; j++)
			if (dp[j] >= 0)
				dp[j + A[i]] = max(dp[j + A[i]], dp[j] - 1);
	}
	for (int i = 1; i <= 1000; i++)
		if (dp[i] >= 0)
			N++;
	cout << "Total=" << N;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章