背包问题
#include <iostream>
#include <queue>
#include <memory.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string>
#define eps 1e-6
#define IN (1<<28)
using namespace std;
int M,N;
int a[25];
int main()
{
while( cin >> M )
{
cin >> N;
for( int i = 0; i < N; i++ )
cin >> a[i];
int ans = 0;
int dp[M+5];
for( int i = 0; i < M+5; i++ )
dp[i] = IN;
dp[0] = 0;
for( int i = 0; i < N; i++ )
{
for( int j = M; j >= a[i]; j-- )
{
dp[j] = min(dp[j], dp[j-a[i]] + 1);
}
}
if( dp[M] >= 1000 )
cout << dp[M] << endl;
else
cout << "0" << endl;
}
return 0;
}
注意初始化即可