萌新刚入OI血战dp无法战胜

这是题目:

screenshotnoscale448dc2e2-7a57-447c-87cc-121a1c6f47ce
screenshotnoscale9e8743e1-06b0-4960-9904-bb57ae2e4d19
screenshotnoscalea1ac7a63-0286-4e2f-8d04-2bc3a18cf211

我的代码:

#include<bits/stdc++.h>
#define I using
#define AK namespace
#define IOI std
#define i_ak return
#define ioi  0
#define i_will signed
#define ak main
#define IMO ()
#define int long long
#define double long double
I AK IOI;
int n,m,C,v[5005],w[5005],c[5005],lim[5005],sum[5005],cnt[5005],dp[5005];
vector<int>weight[5005],value[5005],vv[5005],ww[5005];
void solve(int n,int W,vector<int>weights,vector<int>values,int sum_val,int type){
    const int MAX_VAL=sum_val;
    vector<int>min_weight;
    vector<bitset<100005>>dp(W+1);
    dp[0].set(0);
    min_weight.assign(MAX_VAL+1,INT_MAX);
    min_weight[0]=0;
    for(int i=0;i<n;i++){
        int wi=weights[i],vi=values[i];
        for(int w=W-wi;w>=0;w--){
            if(dp[w].any()){
                int new_w=w+wi;
                if(new_w>W)continue;
                dp[new_w]|=dp[w]<<vi;
            }
        }
    }
    for(int w=0;w<=W;w++){
        bitset<100005>&bs=dp[w];
        for(int v=0;v<=MAX_VAL;v++)if(bs.test(v))if(w<min_weight[v])min_weight[v]=w;
    }
    bitset<100005>res;
    for(int w=0;w<=W;w++)res|=dp[w];
    for(int v=0;v<=MAX_VAL;v++){
        if(res.test(v)){
        	vv[type].push_back(v);
        	ww[type].push_back(min_weight[v]);
        }
    }
}
i_will ak IMO{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	//freopen("diversity.in","r",stdin);
	//freopen("diversity.out","w",stdout);
	cin>>n>>m>>C;
	for(int i=1;i<=n;i++){
		cin>>v[i]>>w[i]>>c[i];
		sum[c[i]]+=v[i];
		cnt[c[i]]++;
		weight[c[i]].push_back(w[i]);
		value[c[i]].push_back(v[i]);
	}
	for(int i=1;i<=C;i++)cin>>lim[i];
	for(int i=1;i<=C;i++)solve(cnt[i],lim[i],weight[i],value[i],sum[i],i);
	for(int i=1;i<=C;i++){
		vector<int>pre(dp,dp+m+1);
		for(int j=0;j<ww[i].size();j++){
			int wt=ww[i][j],vt=vv[i][j];
			for(int k=m;k>=wt;k--){
				dp[k]=max(dp[k],pre[k-wt]+vt);
			}
		}
	}
	cout<<dp[m];
	i_ak ioi;
}

可过样例,测试点全部 RE?

1 个赞

https://www.luogu.com.cn/discuss/1082015

1 个赞

前半段没截全:

screenshotnoscaled529e5c7-c5f8-4107-8d04-e0bfd6acc434

1 个赞

好辣

1 个赞

有用就点个赞吧qwq

1 个赞

说了多少次了看发帖规则不要发AC代码还是AI的啊

你还想吃禁言是不

1 个赞

@LeuR 没事,他这个好像不AC

1 个赞

@LeuR 来都来了,帮我调题呗。

1 个赞

(帖子已被作者删除)

1 个赞

思路假了 @LeuR 结帖

1 个赞

你是不是把我禁言了

昨天