最少硬币问题
# include <iostream> # include <algorithm> # define INF 0x3f3f3f3f //0x3f3f3f3f的十进制是1061109567,可以作为无穷大使用而不致出现数据大于无穷大的情形。 using namespace std ; long long dp [ 100000 ] ; int w [ 100000 ] , t [ 100000 ] , m , n ; //w为面值 t为个数 m为凑的钱数 n为硬币的种类数 int main ( ) { memset ( dp , INF , sizeof ( dp ) ) ; //全部赋为最大是为了不影响比较。即只需要求最小的即可 dp [ 0 ] = 0 ; //与max中的全部赋为0一样。即只需要求最大的即可 cin >> n ; for ( int i = 1 ; i <= n ; i ++ ) cin >> w [ i ] >> t [ i ] ; cin >> m ; for ( int i = 1 ; i <= n ; i ++ ) for ( int j = 1 ; j <= t [ i ] ; j ++ ) for ( int k = m ; k >= w [ i ] ; k -- ) dp [ k ] = min ( dp [ k ] , dp [ k - w [