题意:给出n头牛的身高,以及一个书架的高度,问怎样选取牛,使得它们的高的和超过书架的高度最小。
将背包容量转化为所有牛的身高之和,就可以用01背包来做===
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define maxn 2000005 6 using namespace std; 7 int dp[maxn],h[50]; 8 int main() 9 { 10 int n,b,i,j,sum=0,tmp=1000010; 11 scanf("%d %d",&n,&b); 12 for(i=1;i<=n;i++) 13 { 14 scanf("%d",&h[i]); 15 sum+=h[i]; 16 } 17 for(i=1;i<=n;i++) 18 { 19 for(j=sum;j>=h[i];j--) 20 { 21 dp[j]=max(dp[j],dp[j-h[i]]+h[i]); 22 { 23 if(dp[j]>=b&&j<tmp) 24 tmp=j; 25 } 26 } 27 } 28 printf("%d\n",tmp-b); 29 }
时间: 2024-10-18 20:11:40