标签: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