1380. 邮票

状态表示:

(f(i,j)):从前(i)张邮票中选,总面值恰好为(j)所需的最少邮票数。

状态转移:

按照完全背包的转移方式。

[f(i,j)=min(f(i-1,j),f(i,j-v_i)+1) ]

边界:

[f(0,0)=0 ]

const int N = 2e6+10;
int f[N];
int n, m;

int main() 
{
    cin >> m >> n;
    
    memset(f, 0x3f, sizeof f);
    f[0] = 0;
    for(int i = 0; i < n; i++)
    {
        int value;
        cin >> value;
        for(int j = value; j < N; j++)
            f[j] = min(f[j], f[j-value] + 1);
    }
    
    int res = 1;
    while(f[res] <= m) res++;
    cout << res - 1 << endl;
    //system("pause");
    return 0;
}
原文地址:https://www.cnblogs.com/fxh0707/p/14888109.html