【发布时间】:2015-09-04 07:11:03
【问题描述】:
这个问题相当简单直接。但是我不能完全使用 dp 背包样式来解决它。我对此有解决方案,但由于这里每种面额的硬币数量是有限的(在这个问题中它是),这就产生了一个问题。我想得到一个可以用来实现背包的 2d 重复。 我运行良好的实际解决方案如下:
#include<iostream>
using namespace std ;
int main ()
{ int flag ;
int N,i ;
int sum ;
int counter ;
while (cin >> N >>sum )
{
counter = 0;
flag= 0 ;
int count =0;
for( i = N ; i>=1;i--){
count += i ;
counter++;
if (count >sum){
count-=i ;
counter -- ;
}
if(count == sum){
flag = 1 ;
break ;
}
}
if (flag==1)
cout << counter<<"\n" ;
else cout <<-1<<"\n" ;
}
return 0 ;
}
【问题讨论】:
标签: dynamic-programming knapsack-problem