代码求调(有注释,玄关
  • 板块学术版
  • 楼主JoeZ009
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/9 15:03
  • 上次更新2024/7/9 16:12:16
查看原帖
代码求调(有注释,玄关
544773
JoeZ009楼主2024/7/9 15:03

题

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e3+10,K=15e3+10;
int n,k,ans;
int w[N],win[N],v[N]; 
int p[N];
int f[K];
signed main() {
	memset(p,0x3f,sizeof p);
	p[1]=0;
	for(int i=1;i<=1000;i++) {
		for(int j=1;j<=2000;j++) {
			if(i+(int)round(1.0*i/j)>1000)continue;
			p[i+(int)round(1.0*i/j)]=min(p[i+(int)round(1.0*i/j)],p[i]+1);
		}
	}   //pi表示从1变为i至少操作几次 
	
	cin>>n>>k;
	for(int i=1;i<=n;i++) {
		cin>>win[i];
		w[i]=p[win[i]];
	}
	for(int i=1;i<=n;i++)cin>>v[i];
	
	
	k=min(k,15000ll);  //每一位数最多被操作12次 
	for(int i=1;i<=n;i++) {  //背包 
		for(int j=k;j>=w[i];j--)ans=max(ans,f[j]=max(f[j],f[j-w[i]]+v[i]));
	}
	cout<<ans<<endl;
	return 0;
}
2024/7/9 15:03
加载中...