专栏文章
题解:P11377 [GESP202412 七级] 武器购买
P11377题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqtm2cp
- 此快照首次捕获于
- 2025/12/04 10:32 3 个月前
- 此快照最后确认于
- 2025/12/04 10:32 3 个月前
题目意思概括:
t组数据,对于每组数据 个物品无法在 价钱让 总强度
思路:背包
1.判断类型
根据样例显然是01背包
2.推导转移方程
(1)让 为 花费为 时 最大总强度为
为花费按照思路所以
这时方程为
背包代码如下
CPPfor(int i=1;i<=n;i++)//背包
{
for(int j=Q;j>=c[i];j--)
{
dp[j]=max(dp[j],dp[j-c[i]]+p[i]);
}
}
完整代码如下
温馨提示多测要清空
CPP#include<bits/stdc++.h>//具体解析见上
using namespace std;
int t,n,P,Q;
int p[50500],c[50500],dp[50500];//开大点数组好习惯
int main()
{
ios::sync_with_stdio(false);//同步 输入输出减少一些时间
cin.tie(0);
cout.tie(0);
cin>>t;
while(t--)
{
cin>>n>>P>>Q;
for(int i=1;i<=n;i++)
{
cin>>p[i]>>c[i];
}
memset(dp,0,sizeof(dp));//多测清空
for(int i=1;i<=n;i++)//背包
{
for(int j=Q;j>=c[i];j--)
{
dp[j]=max(dp[j],dp[j-c[i]]+p[i]);
}
}
if(dp[Q]<P) cout<<"-1\n";//输出
else
{
for(int i=1;i<=Q;i++)//正序寻找ans
{
if(dp[i]>=P)
{
cout<<i<<'\n';
break;
}
}
}
}
return 0;
}
本蒟蒻第一篇题解求过
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...