78 条题解

  • 0
    @ 2006-11-16 20:25:19

    有个n为3000!(汗!………………)

    开了2000,竟然暴217,而不是201- -……

  • 0
    @ 2006-11-12 22:31:05

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

    在此多谢siweia神牛指点,解决了此题。

  • 0
    @ 2006-11-01 10:58:17

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    汗~~原来在中间计算的时候也要mod 10000

    我刚开始只在最后结果处mod 10000,结果提交了n边都没过,然后一改就过了~

    提醒一下!

  • 0
    @ 2006-10-25 13:45:07

    O(N^2) DP

    经过删数处理后可以做到

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

  • 0
    @ 2006-10-01 13:35:41

    貌似题意是 前>后,不是前>=后

    囧,题目叙述太混蛋了.........那么麻烦............

    终于开始动手做了

  • 0
    @ 2006-09-16 13:11:17

    0607的办法好

    我用相似的思想 结果超时

    程序复杂 因为头脑复杂

  • 0
    @ 2006-08-31 15:17:57

    求方案数要小心,对于相同价格的商品,只要考虑最后一件就可以了。

    如:

    5

    10

    8

    11

    8

    7

    输出:3 2。第一个8可以忽略。(原来没忽略只过9组)

  • 0
    @ 2006-10-12 17:14:27

    给解决办法副值的时候直接就mod 10000

  • 0
    @ 2006-08-30 18:22:55

    交了N次终于过了^_^

    根本不需要高精度啊

    直接DP就可以了

  • 0
    @ 2006-08-29 21:47:19

    为什么第八和第九个测试数据总是过不了?

  • 0
    @ 2006-08-29 18:41:13

    我的无耻方法:

    double ans;

    ......

    printf ("%0.0lf",ans);

    可以避免高精度.

    当时东邪歪刀问我的时候,我告诉了他/她,可惜他/她没用

  • 0
    @ 2006-10-08 22:22:11

    看了一下题解,各位都好牛……|orz啊……双重DP……NB啊……

    可是……用得着……这么麻烦么……

    题目很容易的……寒,就是比普通DP多了个记录……

    请各位大牛无视我就可以了……

    PS:题目描述= =无语= =别理解为前>后……好象不是的说……

  • 0
    @ 2006-08-29 18:30:35

    ER..高精度..高精度一定要注意

  • 0
    @ 2006-08-28 12:59:58

    case10

    n=3000

  • 0
    @ 2006-08-28 09:31:06

    开到5000过开到2000过不掉。。。

  • 0
    @ 2006-08-28 13:15:55

    双重DP....

    可是这难度...

  • -1
    @ 2016-06-12 21:30:27

    第一个数用LIS强算,同时预处理,第二个数递推。
    ```c++
    #include<cstdio>
    #include<vector>
    #include<map>
    #include<set>
    #include<algorithm>
    using namespace std;

    const int mod = 10000;

    vector<int> input,d,rem[3001],info;
    int n;
    set<int> s;

    int main()
    {
    /*freopen("IN","r",stdin);*/
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
    int k;
    scanf("%d",&k);
    input.push_back(k);
    info.push_back(0);
    }

    for(int i=n-1;i>=0;i--)
    {
    int now=lower_bound(d.begin(),d.end(),input[i])-d.begin();
    if(now==(int)d.size())
    d.push_back(input[i]);
    else if(input[i]<d[now])
    d[now]=input[i];
    rem[now].push_back(i);
    }
    printf("%d ",d.size());

    int last = d.size(),ans=0;
    for(int i=0;i<last;i++) sort(rem[i].begin(),rem[i].end());
    for(int i=0;i<(int)rem[0].size();i++) info[rem[0][i]]=1;

    for(int i=0;i<last-1;i++)
    {
    map<int,int> s;
    for(int j=rem[i].size()-1;j>=0;j--)
    {
    int now=rem[i][j];
    if(s.count(input[now])) {int k=info[now]-s[input[now]];s[input[now]]=info[now];info[now]=k;}
    else s[input[now]]=info[now];
    int next=upper_bound(rem[i+1].begin(),rem[i+1].end(),now)-rem[i+1].begin();
    for(int k=next-1;k>=0;k--)
    if(input[rem[i+1][k]]>input[now])
    info[rem[i+1][k]]= (info[rem[i+1][k]]+info[now]) % mod;
    }
    }
    for(int i=0;i<(int)rem[last-1].size();i++)
    {
    int now=rem[last-1][i];
    if(s.count(input[now])) continue;
    ans = (info[now]+ans) % mod;
    s.insert(input[now]);
    }
    printf("%d\n",ans);
    return 0;
    }
    ```

  • -2
    @ 2017-06-24 14:44:47
    #include<bits/stdc++.h>
    #define ll long long
    #define mem(x) memset(x,0,sizeof(x))
    using namespace std;
    int f[3005];
    int a[3005];
    int ans[3005];
    int main()
    {
        //freopen(".in","r",stdin);
        //freopen(".out","w",stdout);
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=n;i++) {
            ans[i]=1;
            f[i]=1;
            for(int j=1;j<i;j++) {
            //  printf("%d %d %d\n",i,j,ans[3]);
            //  printf("%d %d %d\n",i,j,ans[2]);
                }
                if(a[i]<a[j]) {
                    if(f[i]==f[j]+1) {
                        ans[i]+=ans[j];
                        ans[i]%=10000;
                    }
                    else if(f[i]<f[j]+1) 
                        ans[i]=ans[j];
                        f[i]=f[j]+1;
                    }
                }
            }
        }
        int answer=0;
        int answer2=0;
        for(int i=1;i<=n;i++) answer=max(answer,f[i]);
    //  printf("%d\n",ans[3]);
    //  printf("%d\n",ans[2]);
        printf("%d %d\n",answer,answer2);
        return 0;
    }
    
    /*
    
    12
    68
    69
    54
    64
    68
    64
    70
    67
    78
    62
    98
    87
    
    3
    2
    2
    1
    
    */
    

信息

ID
1205
难度
6
分类
动态规划 点击显示
标签
递交数
1419
已通过
375
通过率
26%
被复制
6
上传者