关注
unsigned long long solution2(int deep, int* coinNum, int* coinValue,int* coinSum,vector<vector<int>>& dp, int sum) {
if (deep == 6) return sum > coinNum[deep] ? 0 : 1;
if (dp[deep][sum] > 0 || sum > coinSum[deep]) return dp[deep][sum];
int ans = 0;
for (int i = 0; i <= min(sum / coinValue[deep], coinNum[deep]); ++i)
ans += solution2(deep + 1, coinNum, coinValue, coinSum, dp, sum - i*coinValue[deep]);
dp[deep][sum] = ans;
return ans;
}
unsigned long long solution3(int deep, int* coinNum, int* coinValue,int * coinSum, vector<vector<int>>& dp, int m) {
int ans = 0;
for (int i = 0; i <= m; ++i) {
if (0 == dp[deep][i]) continue;
for (int j = min(i / coinValue[deep], coinNum[deep]); j >= 0; --j) {
if (i - j*coinValue[deep] > coinSum[deep + 1]) break;
if (deep < 5)
dp[deep + 1][i - j*coinValue[deep]] += dp[deep][i];
else
ans += dp[deep][i];
}
}
return deep < 5 ? solution3(deep + 1, coinNum, coinValue, coinSum, dp, m) : ans;
}
int main() {
int m = 5000;
vector<vector<int>> dp(7, vector<int>(m+1, 0));
int coinValue[7] = { 100,50,20,10,5,2,1 }; //七种硬币面值
int coinNum[7] = { 1000,1000,1000,1000,1000,1000,1000 }; //七种硬币数量
//coinSum[i]表示在index在i-1以后的所有硬币能够凑起来的最大数,比如本例中coinSum[6]=1000,coinSum[5]=3000
int coinSum[7];
coinSum[6] = coinNum[6] * coinValue[6];
for (int i = 5; i >= 0; --i)
coinSum[i] = coinSum[i + 1] + coinNum[i] * coinValue[i];
cout << solution2(0, coinNum, coinValue, coinSum, dp, m) << endl;
vector<vector<int>> dp1(7, vector<int>(m + 1, 0));
dp1[0][m] = 1;
cout << solution3(0, coinNum, coinValue, coinSum, dp1, m) << endl;
return 0;
}
查看原帖
点赞 评论
相关推荐
05-25 10:45
西华大学 Java 
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的实习收获 #
32110次浏览 504人参与
# 第一份工作应该选高薪还是热爱? #
61636次浏览 561人参与
# 实习吐槽大会 #
34663次浏览 162人参与
# 2025牛客秋招季 #
5139次浏览 159人参与
# 晒一晒你的工位 #
86353次浏览 307人参与
# 我的租房踩坑经历 #
30237次浏览 304人参与
# 移动求职进展汇总 #
1586次浏览 17人参与
# 穿越回高考你还会选现在的专业吗 #
22817次浏览 270人参与
# 26届秋招投递记录 #
4257次浏览 115人参与
# 求职遇到的搞笑事件 #
113172次浏览 769人参与
# 招银网络求职进展汇总 #
113253次浏览 741人参与
# 地方国企笔面经互助 #
29953次浏览 98人参与
# 双非能在秋招上岸吗? #
215316次浏览 1144人参与
# 毕业旅行去哪玩儿 #
1322次浏览 33人参与
# 如果有时光机,你最想去到哪个年纪? #
47237次浏览 800人参与
# 非技术岗简历怎么写 #
209875次浏览 2861人参与
# 打工人锐评公司红黑榜 #
146185次浏览 920人参与
# 找工作有哪些冷知识 #
97936次浏览 1382人参与
# 携程求职进展汇总 #
533502次浏览 3992人参与
# 牛友们,签完三方你在忙什么? #
95104次浏览 839人参与