代码随想录day37 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼梯(进阶)
代码随想录
# include <bits/stdc++.h>
using namespace std;
int main ( ) {
int N, V;
cin >> N >> V;
vector< int > weights ( N, 0 ) ;
vector< int > values ( N, 0 ) ;
for ( int i = 0 ; i < N; i++ ) {
cin >> weights[ i] >> values[ i] ;
}
vector< int > dp ( V + 1 , 0 ) ;
for ( int i = 0 ; i < N; i++ ) {
for ( int j = weights[ i] ; j <= V; j++ ) {
dp[ j] = max ( dp[ j] , dp[ j - weights[ i] ] + values[ i] ) ;
}
}
cout << dp[ V] ;
return 0 ;
}
代码随想录
class Solution {
public :
int change ( int amount, vector< int > & coins) {
int len = coins. size ( ) ;
vector< int > dp ( amount + 1 , 0 ) ;
dp[ 0 ] = 1 ;
for ( int i = 0 ; i < len; i++ ) {
for ( int j = coins[ i] ; j <= amount; j++ ) {
dp[ j] += dp[ j - coins[ i] ] ;
}
}
return dp[ amount] ;
}
} ;
代码随想录
class Solution {
public :
int combinationSum4 ( vector< int > & nums, int target) {
vector< int > dp ( target + 1 , 0 ) ;
dp[ 0 ] = 1 ;
for ( int i = 0 ; i <= target; i++ ) {
for ( int j = 0 ; j < nums. size ( ) ; j++ ) {
if ( nums[ j] <= i && dp[ i - nums[ j] ] < INT_MAX - dp[ i] ) {
dp[ i] += dp[ i - nums[ j] ] ;
}
}
}
return dp[ target] ;
}
} ;
代码随想录
# include <bits/stdc++.h>
using namespace std;
int main ( ) {
int n, m;
cin >> n >> m;
vector< int > dp ( n + 1 , 0 ) ;
dp[ 0 ] = 1 ;
for ( int i = 0 ; i <= n; i++ ) {
for ( int j = 1 ; j <= m; j++ ) {
if ( j <= i && dp[ i] + dp[ i - j] < INT_MAX) {
dp[ i] += dp[ i - j] ;
}
}
}
cout << dp[ n] ;
return 0 ;
}