sdutoj 1725の最小コインの問題(複数のバックパック)

トピックリンク:こちらをクリックしてください

ここに画像を挿入説明

持っています n個 n個 コインの異なる宗派、ならびに各金種の制限、複数のナップザック問題のコインの適切な数。

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

using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 15, M = 20010;

int a[N], b[N];     // 面值和数量
int f[M];

int main()
{
	int n, m;
	
	scanf("%d", &n);
	for(int i = 0; i < n; i++)  scanf("%d%d", &a[i], &b[i]);
	scanf("%d", &m);
	
	memset(f, 0x3f, sizeof f);
	f[0] = 0;
	
	for (int i = 0; i < n; i++)             // 枚举物品
	{
	    for (int j = m; j >= a[i]; j--)     // 再逆序枚举体积
	    {
	        for (int k = 0; k <= b[i] && k * a[i] <= j; k++)       // 再枚举决策
	        {
	            f[j] = min(f[j], f[j - k * a[i]] + k);
	        }
	    }
	}
	
    printf("%d\n", f[m] == INF ? -1 : f[m]);
	return 0;
}
844元記事公開 ウォンの賞賛135 ビュー150,000 +を

おすすめ

転載: blog.csdn.net/qq_42815188/article/details/103439908