洛谷 P2623 物品选取
2024-08-24 22:27:41
https://www.luogu.org/problemnew/show/P2623
https://www.luogu.org/blog/test-1/solution-p2623
重点就是甲类物品最多取一个,一定能取到最优解。。。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pll; ll ans[],an2;
//前i个物品,用j的容量的最大价值
vector<pll> dd;
ll n,m;
int main()
{
ll idx,i,j,k,a,b,c;
scanf("%lld%lld",&n,&m);
for(i=;i<=n;i++)
{
scanf("%lld",&idx);
if(idx==)
{
scanf("%lld%lld",&a,&b);
dd.pb(mp(a,b));
}
else if(idx==)
{
scanf("%lld%lld%lld",&a,&b,&c);
if(b==)
{
for(j=;j<=m;j++) ans[j]+=a*c;
}
else
{
for(j=m;j>=;j--)
{
for(k=min(c,j/b);k>=;k--)
{
ans[j]=max(ans[j],ans[j-k*b]+k*a);
}
}
}
}
else if(idx==)
{
scanf("%lld%lld",&a,&b);
if(b==) exit(-);
else
{
for(j=b;j<=m;j++)
{
ans[j]=max(ans[j],ans[j-b]+a);
}
}
}
//for(int i=0;i<=m;i++) printf("a%lld %lld\n",i,ans[i]);
}
for(i=;i<=m;i++) ans[i]=max(ans[i],ans[i-]);
an2=ans[m];
for(i=;i<dd.size();i++)
{
for(j=;j<=m;j++)
{
an2=max(an2,ans[m-j]+dd[i].fi*j*j-dd[i].se*j);
}
}
printf("%lld",an2);
return ;
}
最新文章
- CSharpGL(28)得到高精度可定制字形贴图的极简方法
- Android APP压力测试(三)之Monkey日志自动分析脚本
- redis(一) 安装以及基本数据类型操作
- phpcms get标签用法
- 前序/中序--->;后序
- Redis数据持久化之AOF持久化
- 两个学生OJ差集
- uva1658 admiral
- ASP.NET MVC5总结(四)登陆中常用技术解析之验证码
- 灵活运用绑定变量---declare匿名块使用绑定变量
- SQL 2008 数据库迁移
- C、C++用指针引用的差异
- STL笔记之set
- 【转】Java 并发:Executors 和线程池
- Spring Boot Document Part II(下)
- Leetcode_75_Sort Colors
- JVM调优入门之初探
- webpack(3)-管理资源
- CF508E
- circRNA