【完全背包或哈希映射】HDU-1248 寒冰王座

 2023-09-05 阅读 89 评论 0

摘要:注解 1、可用完全背包来做。 2、也可用哈希映射来做。 3、注意如果输入的数字小于150,应该直接输出该数字,因为什么都买不了。 代码(完全背包) #include <iostream> #include <cstring>using namespace std;const int LEN = 100

在这里插入图片描述
在这里插入图片描述

注解

1、可用完全背包来做。
2、也可用哈希映射来做。
3、注意如果输入的数字小于150,应该直接输出该数字,因为什么都买不了。

代码(完全背包)

#include <iostream>
#include <cstring>using namespace std;const int LEN = 10010;int dp[LEN];void init(){memset(dp, 0, sizeof(dp));for(int i=0; i<150; i++){dp[i] = i;}for(int i=151; i<200; i++){dp[i] = dp[i-150];}for(int i=200; i<350; i++){dp[i] = min(dp[i-150], dp[i-200]);}    for(int i=350; i<LEN; i++){int minn = min(dp[i-150], dp[i-200]);minn = min(minn, dp[i-350]);dp[i] = minn;}}int main() {init();int T;scanf("%d", &T);for(int i=0; i<T; i++){int N;scanf("%d", &N);printf("%d\n", dp[N]);}return 0;
}

代码(哈希映射)

#include <iostream>
#include <cstring>using namespace std;const int LEN = 10001;int a[LEN];void init(){memset(a, 0, sizeof(a));a[150] = 1;a[200] = 1;a[350] = 1;for(int i=150; i<LEN; i++){if(a[i]){a[i+150] = 1;a[i+200] = 1;a[i+350] = 1;}}
}int main() {init();int T;scanf("%d", &T);for(int i=0; i<T; i++){int N;scanf("%d", &N);int ans = N;for(int j=N; j>=0; j--){if(a[j]){ans = N-j;break;}}printf("%d\n", ans);}return 0;
}

结果

在这里插入图片描述

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/145.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息