题解

163 条题解

  • 0
    @ 2009-10-12 13:24:42

    ...

  • 0
    @ 2009-10-06 14:07:49

    编译通过...

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

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

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

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

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

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

    沙茶题,鉴定完毕,垃圾数据........

  • 0
    @ 2009-10-05 20:52:49

    编译通过...

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

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

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

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

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

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

    强烈怀疑数据弱得可怜

    题目说N到40 我看连10都不到!!!

    var n,k,i,j,t:integer;

    s:string;

    f:array[1..40,0..6]of longint;

    function change(x,y:integer):longint;

    var i,j:integer;

    begin

    val(copy(s,x,y-x+1),change);

    end;

    begin

    readln(n,k);

    read(s);

    for i:=1 to n do

    f:=change(1,i);

    for i:=2 to n do

    for j:=1 to k do

    if j+1f then

    f:=f[t,j-1]*change(t+1,i);

    write(f[n,k]);

    end.

  • 0
    @ 2009-10-02 10:37:39

    秒杀 农夫山泉哦

    #include

    #include

    int n,k;

    double f[41][7];

    char ch[50];

    int num[50];

    void fun(int,int);

    main()

    {

    scanf ("%d %d\n",&n,&k);

    gets(ch);

    int len,i;

    len=strlen(ch);

    for (i=0;i=1)

    {

    s=0;

    for (l=i;l>=1;l--)

    {

    p=num[l];

    for (m=i-l+1;m>1;m--)

    p*=10;

    s+=p;

    }

    f[i][j]=s;

    return;

    }

    if (f[i][j]!=0)

    return;

    for (ii=i-1;ii>=j;ii--)

    {

    fun(ii,j-1);

    s=0;

    for (l=i;l>ii;l--)

    {

    p=num[l];

    for (m=i-l+1;m>1;m--)

    p*=10;

    s+=p;

    }

    if (f[i][j]

  • 0
    @ 2009-09-24 11:12:42

    不用高精可以吗?好水的题啊~~~~~~

  • 0
    @ 2009-09-19 17:32:00

    蛮简单的!

  • 0
    @ 2009-09-17 22:13:33

    编译通过...

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

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

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

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

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

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

    我的脑残随机算法

    随机产生80万个方案

    太脑残了

    比正常算法的程序还长很多

  • 0
    @ 2009-09-17 21:55:11

    很简单的DP

    f表示前i个数用j个乘号的最大值

    f=max(f[k,j-1]+a[k+1,i]);

    注意j>=i exit(0);

    j=0 exit(a);

    ---|---|---|---|---|---|---|---|---|--晒程序---|---|---|---|---|---|---|---|---|---|-

    program p1347;

    var

    i,j,n,k:longint;

    f:array[0..50,0..7]of longint;

    a:array[0..50,0..50]of longint;

    s:string;

    function main(i,j:longint):longint;

    var

    k:longint;

    begin

    main:=0;

    if j>=i then exit(0);

    if j=0 then exit(a[1,i]);

    if f-1 then exit(f);

    for k:=1 to i do

    if main(k,j-1)*a[k+1,i]>main then

    main:=main(k,j-1)*a[k+1,i];

    f:=main;

    end;

    begin

    readln(n,k);

    readln(s);

    for i:=1 to n do

    for j:=1 to n-i+1 do

    val(copy(s,i,j),a);

    for i:=0 to n do

    for j:=0 to k do

    f:=-1;

    writeln(main(n,k));

    end.

  • 0
    @ 2009-09-17 18:31:48

    居然不用高精都AC了。。

    var l,k,i,j,c,code:longint; max,x:qword;

    s,s1:string;

    f:array[0..41,1..7]of qword;

    begin

    readln(l,k);

    readln(s);

    for i:=1 to k+1 do

    for j:=i to l-k+i-1 do

    begin

    if i=1

    then begin

    s1:=' ';

    s1:=copy(s,1,j);

    val(s1,x,code);

    f[j,i]:=x;

    end

    else begin

    max:=0;

    for c:=j-1 downto 1 do

    begin

    s1:=' ';

    s1:=copy(s,c+1,j-c);

    val(s1,x,code);

    max:=f[c,i-1]*x;

    if max>f[j,i] then f[j,i]:=max;

    end;

    end;

    end;

    writeln(f[l,k+1]);

    end.

  • 0
    @ 2009-09-11 15:19:07

    怎么感觉是3维动归的说...

  • 0
    @ 2009-09-08 19:37:14

    哎 我大概只有这种水题可以不看题解一次AC了

  • 0
    @ 2009-09-06 21:55:19

    发关键代码:

    int gnum(int begin,int end)

    {

    if(num[begin][end]==0)

    {

    for(int i = begin;i b?a:b;}

    int dfs(int ind,int k)

    {

    if(k == 0) f[ind][k] = gnum(ind,N-1);

    if(f[ind][k]==0)

    for(int j = ind;j < N-1;++j)

    f[ind][k] = max(f[ind][k],gnum(ind,j)*dfs(j+1,k-1));

    return f[ind][k];

    }

    int main()//f[i][k] = max(num[i][j-1]*f[j][k-1]) (i N >> K >> strnum;

    cout

  • 0
    @ 2009-08-28 21:00:27

    不懂啊

  • 0
    @ 2009-08-28 07:30:53

    var

    n,k,i,j,l:longint;

    f:array[0..50,0..50] of longint;

    s:string;

    function try(i,j:longint):longint;

    var l,sum:longint;

    begin

    sum:=0;

    for l:=i to j do

    sum:=sum*10+ord(s[l])-48 ;

    try:=sum;

    end;

    begin

    readln(n,k);

    readln(s);

    for i:=1 to n do f[0,i]:=try(1,i);

    for i:=1 to k do

    for j:=i+1 to n do

    for l:= i to j-1 do

    if f*try(l+1,j)>f

    then f:=try(l+1,j)*f;

    writeln(f[k,n]);

    end.

  • 0
    @ 2009-08-23 17:08:30

    居然没有考虑到0T_T

  • 0
    @ 2009-08-21 17:26:22

    编译通过...

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

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

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

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

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

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

    copy用错,改了快一个钟头…………

  • 0
    @ 2009-08-20 11:44:14

    ■■■■■■■■■■■■■■■■■■■■■■■■■■

    ■■■■■■■■■■■■■■■■■■■■■■■■■■

    ■■■■■■■■■■■■■■■■■■■■■■■■■■

    ■■■■■■■■■■■■■■■■■■■■■■■■■■

    ■■■■■■■■■■■■■■■■■■■■■■■■■■

    ■■■■■■■■■■■■■■■■■■■■■■■■■■

    ■■■■■■■■■■■■■■■■■■■■■■■■■■

  • 0
    @ 2009-08-20 00:13:53

    郁闷,数组下标开反了,超过范围不算越界么,怎么没有216错误?

    不知道访问到哪里的内存了,查了半天……

    高精乘法+高精大小比较 不过数据好弱……用不到高精。

  • 0
    @ 2009-08-17 07:40:24

    var

    n,k,i,j,s,l:longint;

    f:array[0..50,0..50] of longint;

    g:string;

    function nub(i,j:longint):longint;

    var ii,ss:integer;

    begin

    ss:=0;

    for ii:=i to j do

    ss:=ss*10+ord(g[ii])-48;

    nub:=ss;

    end;

    begin

    readln(n,k);

    readln(g);

    for i:=1 to n-k do f[0,i]:=nub(1,i);

    for s:=1 to k do

    for j:=s+1 to n-(k-s) do

    for l:=s to j-1 do

    if f

  • 0
    @ 2009-08-15 09:58:48

    编译通过...

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

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

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

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

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

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

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

    var f:array[0..6,0..40]of longint;

    i,j,k,kk,n:longint;

    s:array[0..300]of char;

    function b(x,y:longint):longint;

    var str:string;

    i,ll,code:longint;

    begin

    str:='';

    for i:=x to y do

    begin

    str:=str+s[i];

    end;

    val(str,ll,code);

    b:=ll;

    end;

    function max(x,y:longint):longint;

    begin

    if x>y then max:=x else max:=y;

    end;

    begin

    read(n,k);

    readln;

    for i:=1 to n do

    read(s[i]);

    for i:=1 to n do

    f[0,i]:=b(1,i);

    readln;

    for i:=1 to k do

    for j:=i+1 to n do

    for kk:=i to j do

    f:=max(f,f*b(kk+1,j));

    writeln(f[k,n]);

    end.

    纪念~~~~

信息

ID
1347
难度
2
分类
动态规划 点击显示
标签
递交数
3180
已通过
1810
通过率
57%
被复制
20
上传者