时间限制: 1 Sec 内存限制: 128 MB
提交: 904 解决: 403
[提交][状态][讨论版]
题目描述
有n根木棍(0≤n≤30),从中选若干根使得它们的 长度和s 最接近v(正整数,0≤v≤20000),且s<=v
输入格式
第一行,一个整数v;
第二行,一个整数n;
接下来n行,分别表示这n根木棍的长度。
输出格式
一个整数,表示v-s。
输入
输出
样例输入
24
6
8
3
12
7
9
7
样例输出
0
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
int v,n,a[100],f[100000];
int main()
{
cin>>v>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=v;j>=a[i];j--)
f[j]=max(f[j-a[i]]+a[i],f[j]);
cout<<v-f[v];
return 0;
}