请求加强数据
查看原帖
请求加强数据
592238
Elairin176楼主2022/9/19 20:42

众所周知,这道题是个背包dpdp练手题。
但是!我不会dpdp,用了集合枚举,经过了亿点优化,居然A了?!(虽然O2O2,加了O2O2最后一个点也992ms992ms蹭边过的)
以下是代码:

#include <iostream>
using namespace std;
int v,n,a[31],minn=2147483647,acc;
inline int read(){
    register int x=0;
    register char ch=getchar();
    while(ch<'0'||ch>'9'){
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x;
}
int main(void){
	v=read();
	n=read();
	for(register int i=0;i<n;++i){
		a[i]=read();
	}
	register int bin=(int)(v*0.8);//筛掉一部分过小数据
	register int S=1<<n;
	for(register int U=S-1;U>=0;--U){
		acc=0;
		for(register int i=0;i<n;++i){
			if(U&(1<<i)){
				acc+=a[i];
				if(acc>v){
					acc=0;
					break;
				}
			}
		}
		minn=min(v-acc,minn);
		if(acc<bin&&acc!=0){
			break;
		}
		if(minn==0){
			break;
		}
	}
	printf("%d",minn);
}

所以说,请求加一些更强的数据,或者加上枚举,暴力的标签~~(加标签我觉得不可能)~~

违规紫衫.

2022/9/19 20:42
加载中...