ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1244. Джентльмены

What's wrong with this code?(+)
Послано asif 6 мар 2003 12:20
# include <stdio.h>

# define N 100
# define M 100000

int m,n,w[N+1],c[M+1],p[M+1];
int sum,b[N+1],tot;

int main(void)
{
  int i,j;
  scanf("%d%d",&m,&n);
  for(i=1;i<=n;i++){
    scanf("%d",&w[i]);
    sum+=w[i];
  }
  m=sum-m;
  c[0]=1;
  for(i=1;i<=n;i++)
    for(j=m;j>=w[i];j--)
      if(c[j-w[i]]>0){
        c[j]+=c[j-w[i]];
        if(c[j]>1) c[j]=2;
        p[j]=i;
      }
  if(m<0 || c[m]==0) printf("0\n");
  else if(c[m]>1) printf("-1\n");
  else{
    j=m;
    while(j>0){
      i=p[j];
      b[i]=1;
      tot++;
      j-=w[i];
    }
    for(i=1;i<=n;i++)
      if(b[i]){
        printf("%d%s",i,tot==1? "\n":" ");
        tot--;
      }
  }
  return 0;
}