题解

245 条题解

  • 0
    @ 2009-08-07 15:02:47

    var a,b:array[1..200]of longint;

    n,k,sum,x:longint;

    procedure find(st,m,k:longint);

    var i,j:integer;

    begin

    if k=x then begin

    inc(sum);

    exit;

    end;

    for i:=st to (m div 2) do

    begin

    b[k]:=i;

    a[k]:=m-i;

    find(b[k],a[k],k+1);

    end;

    end;

    begin

    read(n,x);

    find(1,n,1);

    write(sum);

    end.

  • 0
    @ 2009-08-05 09:57:30

    普通的递归题

    var

    n,k,s:LONGINT;

    procedure dg(x,y,n:LONGINT);

    var

    i:integer;

    begin

    if (x=k)and(n>=y)

    then begin

    inc(s);

    exit;

    end;

    for i:=y to n-1 do

    dg(x+1,i,n-i)

    end;

    begin

    readln(n,k);

    s:=0;

    dg(1,1,n);

    writeln(s);

    end.

    290Ms ---|---|-Ac

  • 0
    @ 2009-08-05 09:51:16

    庆祝双星!!

  • 0
    @ 2009-08-03 20:28:21

    模拟也ok

    #include

    using namespace std;

    int n,k,s;

    bool fenjie(int x,int l,int c)

    {

    int i;

    bool b=true;

    if(c==k)

    {

    if(x>=l)s++;else return false;

    return true;

    }

    for(i=l;i>n>>k;

    fenjie(n,1,1);

    cout

  • 0
    @ 2009-08-03 20:05:46

    AC20题,纪念一下!

    嘿嘿……

  • 0
    @ 2009-08-02 20:20:17

    背包,14行搞定,秒

    ---|---|---|---|---|---|---|---|---|---|-

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-08-02 20:11:23

    ---|---|---|---|---|---|---|---|--

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-08-02 14:59:51

    由于DP学的不精通,因此没用DP做。

    数据不大可以打表~

    一次AC~^_^

  • 0
    @ 2009-08-01 22:11:45

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-08-01 16:18:08

    {短小精悍}

    program leo;

    var n,k,ans:longint;

    procedure dfs(now,c,s:longint);

    var i:longint;

    begin

    if c=k-1 then inc(ans); else

    for i:=now to (s div (k-c)) do dfs(i,c+1,s-i);

    end;

    begin

    readln(n,k);

    dfs(1,0,n);

    writeln(ans);

    end.

  • 0
    @ 2009-08-01 14:21:22

    void dfs(long s,long nn,long kk)

    {

    if(kk

  • 0
    @ 2009-07-31 19:09:01

    把7分为3份 有4种分法 这个是样例

    可分为1 1 5 1 2 4 1 3 3 2 2 3

    而1 1 5 1 2 4 1 3 3又可以看作

    15 24 33 +1

    223 可以看作 1 1 2 +1 1 1

    那就是a[7,3]:=a[7-1,3-1]+a[7-3,3]

    状态转移方程:a:=a+a

    因为是不要重的 所以就把方程做的条件设为 i>=j

    a[0,0]:=1

    看了好多解释,都有一点疏漏。就把楼下某大神的解释修正了下,供参考..

  • 0
    @ 2009-07-30 18:22:18

    我做的是完全背包,k值大了就不知道怎么做了

  • 0
    @ 2009-07-30 12:06:37

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    1 2 3 有了这个表

    1 1 0 0 规律很明显

    2 1 1 0 仔细看

    3 1 1 1 你就会发现

    4 1 2 1 F[I, J] := F[I-J, J] + F[I-1, J-1]

    5 1 2 2

    6 1 3 3

    7 1 3 4

  • 0
    @ 2009-07-29 14:26:58

    #include

    using namespace std;

    int n,k,f[ 201 ][ 7 ];

    int main()

    {

    cin >> n >> k;

    for(int i = 1 ; i

  • 0
    @ 2009-07-28 16:13:01

    int search(int s,int p) {

    if(p==1) return 1;

    else {

    int i,sum;

    sum=0;

    for(i=0;i

  • 0
    @ 2009-07-26 20:58:39

    动规

    f:=f+f

  • 0
    @ 2009-07-25 08:33:05

    编译通过...

    ├ 测试数据 01:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 72ms

    ---|---|---|---|---|---|---|---|-

    Unaccepted 有效得分:80 有效耗时:72ms

    谁能告诉我这是为什么?

    我深搜的!

  • 0
    @ 2009-07-24 12:43:53

    program vijos1117;

    var n,k,i,j,s,jj,kk:integer;dp:array[1..201,1..6] of longint;

    begin

    readln(n,k);

    for i:=1 to n do dp:=1;

    for i:=2 to n do

    dp:=i div 2;

    for j:=3 to k do

    for i:=j to n do

    begin

    for jj:=1 to i div j do

    begin

    s:=i+j-(j-1)*jj-1-jj;

    if s>0 then

    dp:=dp+dp;

    end;

    end;

    writeln(dp[n,k]);

    end.

    终于把公式推出来了。。

  • 0
    @ 2009-07-21 07:46:07

    递归咋不行????

    program dk;

    var

    a,n,m:qword;

    procedure jk(s,l,b:integer);

    var

    i:integer;

    begin

    if s=2 then m:=m+l div 2-b+1

    else for i:=b to l div s do

    jk(s-1,l-i,i);

    end;

    begin

    read(n,a);

    m:=0;

    jk(a,n,1);

    write(m);

    end.

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

信息

ID
1117
难度
3
分类
动态规划 点击显示
标签
递交数
6168
已通过
3140
通过率
51%
被复制
14
上传者