欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

D.MakeThemEqual---dp预处理+01背包

时间:2023-06-06


#include #include #include using namespace std;const int N = 1010,M=1000010;int cost[N];int b[N],c[N];int f[M];void solve(){int n,k;scanf("%d %d",&n,&k);for(int i=0;i<=k;i++)f[i]=0;for(int i=1;i<=n;i++)scanf("%d",b+i);for(int i=1;i<=n;i++)scanf("%d",c+i);for(int i=1;i<=n;i++){for(int j=k;j>=cost[b[i]];j--){f[j]=max(f[j],f[j-cost[b[i]]]+c[i]);}}printf("%dn",f[k]);}signed main(){memset(cost,0x3f,sizeof cost);cost[1]=0;cost[2]=1;for(int i=1;i<=1000;i++){for(int j=1;j<=i;j++){if(i+i/j<=1000)cost[i+i/j]=min(cost[i+i/j],cost[i]+1);}} int T; scanf("%d",&T); while(T--)solve();}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。