【发布时间】:2020-08-15 19:39:31
【问题描述】:
输入格式:
N T(N = 硬币数量,T = 次数)
C1, C2 .... CN
从我的解决方案中,我得到了这个......
输入:
2 4
5 8
37
输出:
5(这是有效的,因为 37 = (8*4)+(5*1))
输入:
2 2
5 10
30
输出:
3(这里的输出应该是4,因为我不能使用硬币超过2次)。
我的解决方案中的错误在哪里?
#include<bits/stdc++.h>
using namespace std;
int coins[100], N, T, mem[100][100];
int solve(int p, int w, int us[])
{
if(p==N || w<=0){
if(w==0) return 0;
return 1e5;
}
if(mem[w][p]!=-1) return mem[w][p];
int ans=1e5;
if(us[p]<T){
us[p]++;
ans=min(1+solve(p, w-coins[p], us), ans);
us[p]--;
}
ans=min(ans, solve(p+1, w, us));
return mem[w][p]=ans;
}
int main()
{
cin>>N>>T;
for(int i=0;i<N;i++){
cin>>coins[i];
}
int w, us[100];
cin>>w;
memset(mem, -1, sizeof (mem));
memset(us, 0, sizeof (us));
cout<<solve(0, w, us)<<endl;
return 0;
}
【问题讨论】:
-
是 w 100 的最大值吗?
-
是的,我只是使用 100 表大小进行测试,如果我的第二个输入显示正确的结果就可以了。谢谢@GolamMazidSajib
-
T 的最大值?
-
T 的最大值 = 50
-
输出的定义是什么?就像问题似乎是/否,但答案是 3/5 这些数字是多少?
标签: c algorithm dynamic-programming coin-change