标签:背包 false int 物体 coins 动态 true LeetCode dp
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
// 转化为01背包问题描述
// 给你一个总重量是amount的书包和N个物体,每个物体的重量已经给出,问是否有一种装法能够把背包装满
/* 典型的背包问题 */
/* 所以要明确两点 【状态】 【选择】
【状态】 :在运算过程中会变化的量 ==可以选择的物体(因为放进去了就不能选择了)== ==剩余重量(物体放进去了下次能放进去的物体就会有限制)==
【选择】 : 放或者不放
*/
/*
定义DP[]数组的含义,dp[i][j]代表前i个硬币中能否凑出金额j
*/
/*
状态转移矩阵
if(dp[i-1][j]==true) dp[i][j]=true; // 装入或者不装入
if(dp[i-1][j]==false) {
if(dp[i-1][j-coins[i]) {
dp[i][j]=true;
} else {
dp[i][j]=false
}
}
*/
/*
data_base
dp[...][0] = true
dp[0][1...] =false;
*/
vector<vector<int>> dp(coins.size()+1,vector<int>(amount+1,false));
for(int i=0;i<coins.size();i++) {
dp[i][0]=true;
}
for(int i=1;i<coins.size()+1;i++) {
for(int j=1;j<amount+1;j++) {
// 防止背包容量不够
if(j-coins[i-1]<0) {
dp[i][j]=dp[i-1][j];
} else {
// 开始做出选择
dp[i][j]=dp[i-1][j] | dp[i-1][j-coins[i-1]];
}
}
}
return dp[coins.size()][amount];
}
};
标签:背包,false,int,物体,coins,动态,true,LeetCode,dp 来源: https://blog.csdn.net/ahelloyou/article/details/113618422
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。