码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划·题型归纳

时间:2019-08-19 09:14:01      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:style   倒序   back   code   turn   枚举   while   ack   panel   

背包

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;
}

 

动态规划·题型归纳

标签:style   倒序   back   code   turn   枚举   while   ack   panel   

原文地址:https://www.cnblogs.com/phemiku/p/11375202.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!