是去年NOI的第二题
我参加了
源程序还在(我参加的是Pascal组)program No2(input,output,fi,fo);
var
    fi,fo:text;
    i:integer;
    n,k:integer;
    Count:integer;
    NumItem:array[1..6]of integer;
    Idx:integer;
    t:integer;
    f:boolean;begin
    assign(fi,'input2.txt');
    reset(fi);
    readln(fi,n,k);
    close(fi);    for i:=2 to k do
        NumItem[i]:=1;
    NumItem[1]:=n-(k-1);    Count:=1; {最初状态 1,1,……,n-(k-1)也算一种}
    while NumItem[1]>=NumItem[2] do
    begin
        Idx:=2;
        f:=true;
        while f do
        begin
            {移动1}
            dec(NumItem[Idx-1]);
            inc(NumItem[Idx]);
            if NumItem[Idx]>NumItem[Idx-1] then            begin
                 {恢复1}
                 inc(NumItem[Idx-1]);
                 dec(NumItem[Idx]);                 inc(Idx);                 if Idx>k then
                 begin
                     f:=false;
                     NumItem[1]:=-maxint;
                     {writeln('Exit');}
                 end;            end
            else
            begin
                {for i:=1 to k do
                begin
                    write(NumItem[k-i+1]:3);
                end;
                writeln;}                f:=false;
                inc(Count);            end;        end;    end;    assign(fo,'out2.txt');
    rewrite(fo);
    writeln(fo,Count);
    close(fo);end.