01背包
2026-08-20 15:00:49
发布于:广东
2阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 520*520;
ll n,k,a[N],c[N],dp[N],sum;//dp不能用重量范围太大了
int main() //下标变成攻击力 值是获取这么多攻击力花费的最少金币
{
cin>>n>>k;
for(ll i = 1;i<=n;i++)
cin>>a[i]>>c[i],sum+=a[i];
for (ll i = 0; i <= sum; i++) {
dp[i] = 1e18;
}
dp[0] = 0;
for(ll i = 1;i<=n;i++)//遍历每个商品
{
for(ll j = sum;j>=a[i];j--)
dp[j] = min(dp[j],dp[j-a[i]]+c[i]);
}
for(ll i = sum;i>=0;i--)//找只花<=k金币时最大攻击力
{
if(dp[i]<=k)
{
cout<<i<<endl;
return 0;
}
}
return 0;
}
这里空空如也


有帮助,赞一个