2022.3.5

 

 

#include<cstdio>
#include<algorithm>
using namespace std;
int v[110],w[110],dp[250];
int n;
int main()
{
int i,j,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&v[i],&w[i]);
sum+=v[i];
}
for(i=1;i<=sum;i++)//min函数使用前必须初始化dp数组除0外的位置
dp[i]=1e8;
for(i=1;i<=n;i++)
{
for(j=sum;j>=v[i];j--)
{
dp[j]=min(dp[j],dp[j-v[i]]+w[i]);//记录宽度为j的书横着放的最小长度
}
}
for(i=sum;i>=0;i--)
{
if(sum-i>=dp[i])//比较竖着放的书的长度与其余书横着放上面的长度,前者大则证明可放置。
{
printf("%d\n",sum-i);//输出满足条件时竖着放的书的长度
break;
}
}
return 0;
}

posted @ 2022-03-05 14:38  noname5588  阅读(56)  评论(0)    收藏  举报