当前位置: 代码迷 >> 综合 >> HDU 2260 Difficulty Control(DFS)
  详细解决方案

HDU 2260 Difficulty Control(DFS)

热度:37   发布时间:2023-11-15 12:32:37.0

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2260

#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#include<math.h>
using namespace std;long long minn=INT_MAX;
long long tmp=0;
long long m;
int n;struct Node{
int v;
char c;
Node(int x,char c0):v(x),c(c0){}
Node(){v=0;c='A';}
};
bool cmp(Node x,Node y)
{return x.c<y.c;
}
Node node[26];int b[26]={0};//??????·???????
int result[26]={0};void search(int);int main()
{while(cin>>n>>m){for(int i=0;i<n;i++){cin>>node[i].c>>node[i].v;}sort(node,node+n,cmp);memset(b,0,sizeof(b));memset(result,0,sizeof(result));tmp=0;minn=INT_MAX;search(0);bool first=false;int countt=0;for(int j=0;j<n;j++)if(result[j])countt++;cout<<countt<<endl;for(int j=0;j<n;j++)if(result[j]){if(!first)cout<<node[j].c;elsecout<<" "<<node[j].c;first=true;}cout<<endl;}return 0;
}void search(int k)
{if(tmp-m>=minn)return;//剪枝int tmpp=tmp;for(int q=k;q<n;q++)tmpp+=node[q].v;if(m-tmpp>minn)return ;if(k==n){if(abs(tmp-m)<minn){minn=abs(tmp-m);for(int i=0;i<n;i++)result[i]=b[i];}return ;}b[k]=1;tmp+=node[k].v;search(k+1);b[k]=0;tmp-=node[k].v;search(k+1);
}

 

  相关解决方案