P2340 [USACO03FALL]Cow Exhibition G

Lisa

情商和智商和,这不就是个背包

怎样保证大于零呢,我们吧一个商作为维度存进去,另外一个商就是我们转移的值了

然后,直接背包

最后检查所有大于零的部分,统计就可以了

\(dp_i=max(dp_i,dp_{i-s[i]+f_i})\)

注意一下负数要反着转移

然后就可以了

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int f[33];
int n;
int x;
int ans;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d",&x);
		int k=0;
		for(int j=0;j<=30;++j){
			if((1<<j)&x) k=max(k,f[j]+1);
		}
		for(int j=0;j<=30;++j){
			if((1<<j)&x) f[j]=max(k,f[j]);
		}
		ans=max(ans,k);
	}
	cout<<ans;
	return 0;
}
posted @ 2021-09-13 21:44  Simex  阅读(38)  评论(0编辑  收藏  举报