CF1862(div3)题解
F. Magic Will Save the World
题意:
每一秒钟可以生产w个水元素和f个火元素,问需要多少秒才能消灭n个怪兽(攻击时间忽略不计,w或f大于怪兽的值可以攻击,并减少相应的值,可以同时消灭多个怪兽)
思路:
枚举n个怪兽能组成的所有值(可以用01背包求出来),定义这一部分需要水元素消灭,剩下的用火元素消灭。
复杂度: $O(N \cdot sum) $
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void solve(){
ll w,f,n;
cin>>w>>f>>n;
vector<int> a(n+1);
ll sum=0;
for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];
vector<bool> dp(sum+1);
dp[0]=1;
for(int i=1;i<=n;i++){
for(int j=sum;j>=a[i];j--)dp[j]=dp[j]||dp[j-a[i]];
}
ll ans=INF;
for(ll i=0;i<=sum;i++){
if(dp[i])ans=min(ans,max((i+w-1)/w,(sum-i+f-1)/f));
}
cout<<ans<<"\n";
}
G. Replace With Product
This post is licensed under CC BY 4.0 by the author.