深搜解法
#include <iostream>
#define num 100
int n;
int c;
int w[num];
int x[num];
int r;
int cw;
int bestw;
int bestx[num];
using namespace std;
void backtrack(int t)
{
if(t>n)
{
if(cw>bestw)
{
for(int i=1;i<=n;i++)
bestx[i]=x[i];
bestw = cw;
}
return ;
}
r-=w[t];
if(cw+w[t]<=c)
{
x[t]=1;
cw+=w[t];
backtrack(t+1);
cw-=w[t];
}
if(cw+r>bestw)
{
x[t]=0;
backtrack(t+1);
}
r+=w[t];
}
int main()
{
cin>>c;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i];
r+=w[i];
}
backtrack(1);
for(int i=1;i<=n;i++){
if(bestx[i]==1){
cout<<i<<" ";
}
}
cout<<bestw<<endl;
}