完全背包
#include<iostream>
#include<vector>
using namespace std;
int main(){
int N,V;
cin>>N>>V;
vector<int> weight(N,0), value(N,0);
for(int i=0; i<N; i++){
cin>>weight[i]>>value[i];
}
vector<int> dp(V+1, 0);
for(int i=0; i<N; i++){
for(int j=weight[i]; j<=V; j++){
dp[j] = max(dp[j], dp[j-weight[i]]+value[i]);
}
}
cout<<dp[V]<<endl;
return 0;
}
参考文章:代码随想录- 完全背包
518. 零钱兑换
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-coins[i]];
}
}
return dp[amount];
}
};
参考文章:代码随想录- 518. 零钱兑换
377. 组合总和 Ⅳ
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(i>=nums[j] && dp[i] < INT_MAX-dp[i-nums[j]]){
dp[i] += dp[i-nums[j]];
}
}
}
return dp[target];
}
};
参考文章:代码随想录- 377. 组合总和 Ⅳ