3 条题解

  • 0
    @ 2024-5-2 1:05:48

    时间复杂度O(nm)O(nm)

    空间复杂度O(m)O(m)

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1010 , M = 1e4 + 10 ; 
    
    int f[M] ;
    // f[i , j] 表示前 i 种纸币凑出金额为 j 的最少数量
    int n , m , a[N] ;
    
    int main(int argc, char const *argv[])
    {
    	cin.tie(nullptr)->ios::sync_with_stdio(false) ;
    	cin >> n >> m ;
    	for(int i = 1 ; i <= n ; ++ i) cin >> a[i] ;
    	memset(f , 0x3f , sizeof f) ; 
    	f[0] = 0 ; 
    	for(int i = 1 ; i <= n ; ++ i) 
    		for(int j = a[i] ; j <= m ; ++ j)
    			f[j] = min(f[j] , f[j - a[i]] + 1) ;
    
    	cout << f[m] << '\n' ;
    	return 0;
    }
    

    信息

    ID
    114
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    253
    已通过
    59
    上传者