携带研究材料
题目链接
class Solution{
public:
int maxValue ( vector< vector< int >> & nums, int & target) {
vector< int > dp ( target+ 1 , 0 ) ;
for ( int i = 0 ; i < nums. size ( ) ; i++ ) {
for ( int j = nums[ i] [ 0 ] ; j <= target; j++ ) {
dp[ j] = max ( dp[ j] , dp[ j- nums[ i] [ 0 ] ] + nums[ i] [ 1 ] ) ;
}
}
return dp[ target] ;
}
} ;
int main ( )
{
int n, v;
cin>> n >> v;
vector< vector< int >> nums ( n, vector< int > ( 2 ) ) ;
for ( int i = 0 ; i < n; i++ ) {
cin >> nums[ i] [ 0 ] >> nums[ i] [ 1 ] ;
}
Solution sl;
cout<< sl. maxValue ( nums, v) ;
}
零钱兑换II
力扣题目链接
class Solution {
public:
int change ( int amount, vector< int > & coins) {
vector< int > dp ( amount+ 1 , 0 ) ;
dp[ 0 ] = 1 ;
for ( int i = 0 ; i < coins. size ( ) ; i++ ) {
for ( int j = coins[ i] ; j <= amount; j++ ) {
dp[ 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 ) ;
sort ( nums. begin ( ) , nums. end ( ) ) ;
dp[ 0 ] = 1 ;
for ( int i = 0 ; i <= target; i++ ) {
for ( int j = 0 ; j < nums. size ( ) ; j++ ) {
if ( i >= nums[ j] && dp[ i] <= INT_MAX - dp[ i- nums[ j] ] )
dp[ i] += dp[ i- nums[ j] ] ;
}
}
return dp[ target] ;
}
} ;
爬楼梯
题目链接
class Solution{
public:
int getResult ( int & n, int & m) {
vector< int > dp ( n+ 1 , 0 ) ;
dp[ 0 ] = 1 ;
for ( int i = 1 ; i <= n; i++ ) {
for ( int j = 1 ; j <= m; j++ ) {
if ( i >= j)
dp[ i] += dp[ i- j] ;
}
}
return dp[ n] ;
}
} ;
int main ( )
{
int n, m;
cin>> n >> m;
Solution sl;
cout<< sl. getResult ( n, m) ;
}