1023 - 简单01背包? - lzy的游戏

xiaoxiao2022-06-11  38

传送门

分析

这转化,真是够可以的

首先我们需要得出一个结论:无论我们怎么选,最后肯定都有一种选法满足条件(证明的话,感性理解一下,假设我们现在知道最后打出去的牌是哪些,那我们一定可以调整打牌的顺序,使其满足条件) 然后在此基础上我们就可以直接使用0/1背包 将伤害值看做是原牌的价值,魔法值看做是原牌的体积

代码

#include<bits/stdc++.h> #define in read() #define N 100009 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar(); return ans; } int n,m; int val[N],c[N],f[N]; int main(){ n=in; int i,j,k; for(i=1;i<=n;++i){ val[i]=in;c[i]=in; } for(i=1;i<=n;++i) for(j=n;j>=c[i];--j) f[j]=max(f[j],f[j-c[i]]+val[i]); int ans=-1; for(i=1;i<=n;++i) ans=max(ans,f[i]); cout<<ans; return 0; }
转载请注明原文地址: https://www.6miu.com/read-4931516.html

最新回复(0)