IDA*过橙题...
  • 板块P10483 小猫爬山
  • 楼主FS_NEO
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/11/11 18:04
  • 上次更新2024/11/11 21:10:08
查看原帖
IDA*过橙题...
537654
FS_NEO楼主2024/11/11 18:04

非常愚蠢的dfs策略配上非常愚蠢的股价函数总算通过了橙题...

#include<bits/stdc++.h>
#define R register
using namespace std;
typedef long long ll;
const int MAXN=30005;
int n,m,c[MAXN];
int ans;
bool vis[MAXN];
bool cmp(int t1,int t2){
	return t1>t2;
}
inline int check(int t){
	int s=0;
	for(int i=1;i<=n;i++)if(!vis[i])s+=c[i];
	return max(0,(s-t+m-1)/m);
}
void dfs(int x,int t,int s){
	if(check(m-t)+s>=ans)return ;
	if(s>=ans)return ;
	if(x==n+1){
		ans=min(ans,s);
		return ;
	}
	bool flag=1;
	for(int i=1;i<=n;i++){
		if(!vis[i]&&c[i]+t<=m){
			vis[i]=1;
			dfs(x+1,c[i]+t,s);
			vis[i]=0;
			flag=0;
		}
	}
	if(flag){
		for(int i=1;i<=n;i++){
			if(!vis[i]){
				vis[i]=1;
				dfs(x+1,c[i],s+1);
				vis[i]=0;
				return ;
			}
		}
	}
}
int main(){
   	cin>>n>>m;
   	ans=n;
   	for(int i=1;i<=n;i++)cin>>c[i];
   	sort(c+1,c+1+n,cmp);
   	dfs(1,0,1);
   	cout<<ans;
    return 0;
}
2024/11/11 18:04
加载中...