坚持动态编程
stuck on dynamic programming
问题如下:奶工用不同尺寸的包装瓶供应牛奶。瓶子的可能尺寸为{1、5、7和10}升。无论大小,他都希望用尽可能少的瓶子来供应所需的数量。您的目标是帮助他找到满足特定牛奶需求所需的最低瓶子数量。
输入格式:
第一行包含测试用例数N接下来的N行,每行包含一个正整数Li,该整数对应于牛奶的需求。
输出格式:
对于每个输入Li,打印满足需求所需的最小瓶子数量
我已经为这个问题写了这个代码。
#include <iostream>
#include <vector>
#include <stdio.h>
#include <set>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <iomanip>
#include <locale>
#include <stdlib.h>
#include <cstring>
#include <cmath>
#include <tgmath.h>
using namespace std;
const int INF = 1000000000;
int m[4] = { 1, 5, 7, 10 };
int r[100000000];
int milk(int n) {
int q;
if (r[n] < INF)
return r[n];
if (n <= 0)
q = 0;
else {
q = INF;
for (int i = 0; i < 4; i++) {
if (n >= m[i])
q = min(q, 1 + milk(n - m[i]));
}
}
r[n] = q;
return q;
}
int main() {
int t, n;
cin >> t;
while (t--) {
cin >> n;
memset(r, INF, sizeof(r));
cout << milk(n) << endl;
}
return` 0;
}
我为此使用了动态编程。但我只得到每个输入的输出为零。我是dp的新手。请帮忙。
int milk(int n) {
int min;
memset(r, 0, sizeof(r));
for (int i = 1; i <= n; i++) {
min = 10000000; // some very large value greater than n
for (j = 0; j <= 3; j++) {
if (m[j] > i)
continue;
else if (r[i - m[j]] < min)
min = r[i - m[j]];
}
r[i] = min;
}
return r[n];
}
我希望这能起作用,如果你有任何疑问,请发表评论。
相关文章:
- 此动态编程问题的自上而下方法
- 使用动态编程以有限的资金选择活动
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 寻找解决这个动态编程问题的提示
- 为什么其中一个斐波那契序列的动态编程实现比另一个更快
- 不明白为什么动态编程在这里不起作用
- 如何解决在使用动态 2D 数组进行矩阵乘法的 MPI 进行并行编程时的问题
- 如何在动态编程中选择缓存的初始值?
- 今天的主流编程语言主要使用动态还是静态(词汇)作用域?
- C 编程,动态内存无法使用Malloc和Calloc正常工作
- 使用动态编程解决的 C++ 平台
- 元编程:动态声明一个新结构
- C :动态编程,给定3个可能的操作
- 使用动态编程计算二项式系数
- C++中TSP的动态编程解决方案
- 动态编程中这种初始化背后的直觉
- 有没有办法在函数以编程方式返回的引用上多次调用函数? -元组动态访问
- 葡萄酒选择动态编程
- 双递归动态编程
- 带1D阵列USACO培训的动态编程:子集总和