1 条题解
-
0
题解
可以分两种情况,第一种用终结技,第二种不用终结技,不用终结技直接跑背包即可,用终结技,可以在最后背包体积先减去 ,然后终结技等效于前 张攻击牌,每张攻击牌造成的伤害数加 。再跑一遍背包,两者取较大值即可。
#include<bits/stdc++.h> using namespace std; int n,m; long long k,ans; int a[114514]; long long b[114514]; long long dp[114514]; void solve1() { for(int i=1;i<=n-1;i++) for(int j=m;j>=a[i];j--) dp[j]=max(dp[j],dp[j-a[i]]+b[i]),ans=max(ans,dp[j]); } void solve2() { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) for(int j=m-a[n];j>=a[i];j--) dp[j]=max(dp[j],dp[j-a[i]]+k+b[i]),ans=max(ans,dp[j]); } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m>>k; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<n;i++)cin>>b[i]; solve1(); solve2(); cout<<ans<<endl; return 0; }
- 1
信息
- ID
- 282
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 83
- 已通过
- 7
- 上传者