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;
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态