// 数据量小的地方 就是突破口
//
#include<bits/stdc++.h>
using namespace std;
const int N=1111;
int x[N],y[N],dp[33*N];
// dp[i] 价值为 i 时的最小体积
int main()
{
int n,v,i,j,sum;
while( cin>>n>>v )
{
sum=0;
for( i=1;i<=n;++i ) cin>>y[i]; // 总价值
for( i=1;i<=n;++i ) { cin>>x[i]; sum+=x[i]; }
memset( dp,0x3f,sizeof( dp ) ); // INF
dp[0]=0;
// 同等价值的最小体积
for( i=1;i<=n;++i )
for( j=sum;j>=x[i];--j )
dp[j]=min( dp[j],dp[j-x[i]]+y[i] );
for( i=sum;~i;--i ) // 枚举价值 相应体积<=输入体积时 输出价值
if( dp[i]<=v ) break;
cout<<i<<endl;
}
return 0;
}
PTA_2022模拟赛_L3-2 拼题A打卡奖励 (30 分)_dp_w.v交换
猜你喜欢
转载自blog.csdn.net/qq_63173957/article/details/124244311
今日推荐
周排行