站外题悬关求hack
  • 板块题目总版
  • 楼主Wildchesse
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/4/30 13:38
  • 上次更新2023/10/23 17:09:49
查看原帖
站外题悬关求hack
362022
Wildchesse楼主2023/4/30 13:38

https://iai.sh.cn/problem/660

#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define MAXN 5005
#define MOD 1000000007
using namespace std;
int n,t,a[MAXN],ba[MAXN],f[MAXN*2],f2[MAXN*2],s,mi;
/*
void func(){
	memset(f,0,sizeof(f));
	f[0]=1;
	for(int i=1;i<=n;i++){
		for(int j=a[i];j<=t;j++){
			f[j]=max(f[j],f[j-a[i]]+(bool(f[j-a[i]])and f[a[i]] and a[i]));
		}
	}
}
*/
void func(){
	memset(f,0,sizeof(f));
	f[0]=1;
	for(int i=1;i<=n;i++){
		if(a[i]==0){
			continue;
		}
		for(int j=a[i];j<=t;j++){
			int x=f[j];
			f[j]=max(f[j],f[j]+f[j-a[i]]);
			if(f[j]==x){
				f2[j]=1;
			}
			else{
				f2[j]=0;
			}
			f[j]%=MOD;
		}/*
		for(int j=1;j<=t;j++){
			cout<<f[j]<<" ";
		}
		cout<<endl;*/
	}
}
signed main(){
	cin.tie(0);
	cout.tie(0);
	cin>>n>>t;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		s+=a[i];
		ba[i]=a[i];
	}
	func();
	for(int i=1;i<=n;i++){
		if(!f2[t]){
			cout<<f[t]-f[t-a[i]]<<endl;
		}
		else{
			cout<<f[t];
		}
	}
	/*
	for(int i=1;i<=n;i++){
		a[i]=0;
		func();
		cout<<f[t]<<endl;
		cout<<endl;
		a[i]=ba[i];
	}
	*/
	return 0;
}
/*完全背包
for(int i=1;i<=n;i++){
	for(int j=w[i];j<=c;j++){
		dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
	}
}
*/

对3错17。无超时、超空间等。

2023/4/30 13:38
加载中...