code:
#include <stdio.h>
#include <string.h>
int main()
{
int x,y;
scanf("%d%d",&x,&y);
int w[50];
int val[50];
int dp[50][50];
memset (dp,0,sizeof(dp));
for(int i=1;i<=y;i++)
{
scanf("%d%d",&w[i],&val[i]);
}
int mark[50][50];
memset(mark,0,sizeof(mark));
for(int i=1;i<=y;i++)
for(int j=x;j>=0;j--)
{
dp[i][j]=dp[i-1][j];
if(j-w[i]>=0&&dp[i][j]<dp[i-1][j-w[i]]+val[i])
{
dp[i][j]=dp[i-1][j-w[i]]+val[i];
mark[i][j]=i;
}
}
int max=x;
for(int i=x;i>=0;i--)
{
if(dp[y][i]>=dp[y][max])
max=i;
}
printf("%d\n",dp[y][max]);
int path[50];
int q=1;
for(q=y;q>=1;q--)
{
path[q]=mark[q][max];
max=max-w[mark[q][max]];
}
for(int i=1;i<=y;i++)
if(path[i]!=0)
printf("1\n");
else
printf("0\n");
return 0;
}