动态规划·题型归纳

背包

1.填满型01背包

   倒序枚举避开后效性 

题目描述

【题意】
    有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<bits/stdc++.h>
using namespace std;
int a[350],v,n;
bool f[20000];
int main()
{
   cin>>v>>n;
   for(int i=1;i<=n;i++)cin>>a[i];
   f[0]=1;
   for(int i=1;i<=n;i++)
    for(int j=v;j>=a[i];j--)
     if(!f[j])f[j]=f[j-a[i]];
     
   int x=v;
   while(!f[x])x--;
   cout<<v-x;
   return 0;
}

猜你喜欢

转载自www.cnblogs.com/phemiku/p/11375202.html
今日推荐