求助73pts
查看原帖
求助73pts
1118893
Dark_Star楼主2024/7/1 15:48
#include<bits/stdc++.h>
//#define int long long
#define little_dog puts("OvO,2021zjhs005 is better than me.")
#define lcfollower break
#define _2021zjhs005 continue
#define inf 0x3f3f3f3f
#define infi 0x3f3f3f3f3f3f3f3fll
#define up(i,x,y) for(register int i=x;i<=y;++i)
#define dn(i,x,y) for(register int i=x;i>=y;--i)
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return x*f;}
inline void write(int x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10|48);}
inline void writeln(int x){write(x),putchar('\n');}
inline void writesp(int x){write(x),putchar(' ');}
struct lc{
	inline void fre(){freopen(".in","r",stdin);freopen(".out","w",stdout);}
	inline void ext(){exit(0);}
};namespace LC{
	int f[1<<18],g[1<<18],w[20];
	inline signed main(){
		lc follower;
//		follower.fre();
		int n=read(),W=read();
		up(i,1,n)w[i]=read();
		memset(f,0x3f,sizeof(f));
		f[0]=1,g[0]=0;
		up(i,0,(1<<n)-1)
			up(j,1,n){
				if((i>>(j-1))&1)continue;
				if(g[i]+w[j]<=W&&f[i|(1<<j-1)]>=f[i]){
					f[i|(1<<j-1)]=f[i];
					g[i|(1<<j-1)]=g[i]+w[j];
				}else if(g[i]+w[j]>W&&f[i|(1<<j-1)]>=f[i]+1){
					f[i|(1<<j-1)]=f[i]+1;
					g[i|(1<<j-1)]=w[j];
				}
			}
		writeln(f[(1<<n)-1]);
		follower.ext();
	}
}signed main(){
	LC::main();
}
2024/7/1 15:48
加载中...