| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1408 人关注过本帖
标题:一道应该不是很难的动规题,求找错,WA得受不了了
只看楼主 加入收藏
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
结帖率:81.25%
收藏
已结贴  问题点数:20 回复次数:22 
一道应该不是很难的动规题,求找错,WA得受不了了
http://acm.neu.
题目大意:n个数(只为0,1,2),按顺序分成m组,使得所有组的积加起来最大。

思路应该是动规,用f[i,j]表示前i个数分成j组的最大值,枚举第j组从k到i,则f[i,j]=Max(f[k-1,j-1]+(k--i的乘积)) (k>=j),下面是我的程序,wa到暴

程序代码:
#include <stdio.h>
#include <stdlib.h>

long long f[55][55],tpow[55],tmp;

int zero[55],one[55],two[55],n,m,a[55],i,j,k;

int main()
{
    tpow[0]=1;
    for (i=1; i<=50; i++) tpow[i]=tpow[i-1]*2;       //预处理出2的阶乘和,这样求k--i个数的乘积可以直接由其中2的个数得到
    while (scanf("%d%d",&n,&m),n!=0)
    {
          zero[0]=0; one[0]=0; two[0]=0;
          for (i=1; i<=n; i++) 
          {   
              scanf("%d",a+i);
              zero[i]=zero[i-1]; one[i]=one[i-1]; two[i]=two[i-1];
              if (a[i]==0) zero[i]++; else
              if (a[i]==1) one[i]++; else two[i]++;
          }
          memset(f,0,sizeof(f));
          for (i=1; i<=n; i++)
          {
            if (zero[i]==0) f[i][1]=tpow[two[i]]; else f[i][1]=0;      //先直接求出f[i][1]
            for (j=2; j<=m; j++) 
            {
                if (j>i) break;
                for (k=j; k<=i; k++)           //对f[i][j]开始枚举动规,由于剩下k-1个数分成j-1组,克制k>=j
                {
                    if (zero[k-1]==zero[i]) tmp=tpow[two[i]-two[k-1]]; else tmp=0;
                    if (f[i][j]<f[k-1][j-1]+tmp) f[i][j]=f[k-1][j-1]+tmp;
                }
            }
          }
          printf("%lld\n",f[n][m]);
    }
    return 0;
}
搜索更多相关主题的帖子: color 
2011-12-04 21:35
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,感觉好久不见了,还不知道你怎么称呼?
刚看完非诚勿扰,时间不早了,明天我试一下这题看看结果咱们再交流

重剑无锋,大巧不工
2011-12-04 23:13
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 2楼 beyondyf
你也看非诚,里面的十二号真恶心

总有那身价贱的人给作业贴回复完整的代码
2011-12-04 23:25
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,谷慧子么?在那24个里面已经算不错的了。当然,我本人更喜欢佐滕,只是不明白今天她怎么和22号掺合起来了。22号是目前场上我最讨厌的人。
看一热闹而已,别当真。我不太相信在那种场合能找到真爱。她们得到了名声,我们得到了娱乐。

重剑无锋,大巧不工
2011-12-04 23:33
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 4楼 beyondyf
本来就是当娱乐看的,但是今天那个女的把17号和美籍华人给毁了,明明不喜欢那哥们还搞暧昧,太有城府了,连乐嘉都看不下去了。
对不起楼主了,扯了两句没用的

总有那身价贱的人给作业贴回复完整的代码
2011-12-04 23:40
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
好像聊跑题了,楼主别介意。这就该下线了,明天我会提交代码试试去,感觉确实不难,不过话不能说满了,还是试过再说了

重剑无锋,大巧不工
2011-12-04 23:44
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:0 
汗一个
这算版聊不?
2011-12-05 00:16
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
很抱歉,我也WA了
你是东北大学的吗?如果能搞到测试数据就好办一些了。晚上朋友聚会,不知道什么时候能回来。先把我提交的代码发上来,你先批评着,有时间咱们再交流
程序代码:
#include<stdio.h>
long long E(long long * a, int n, int m)
{
    long long e, te, me, b, mb;
    int i, j, mi;
    for(e = i = 0; i < n; e += a[i++]);
    for(j = n; j > m; j--)
    {
        mb = a[0] * a[1];
        me = e - a[0] - a[1] + mb;
        mi = 1;
        for(i = 2; i < j; i++)
        {
            b = a[i] * a[i - 1];
            te = e - a[i] - a[i - 1] + b;
            if(te > me)
            {
                me = te;
                mb = b;
                mi = i;
            }
        }
        e = me;
        a[mi - 1] = mb;
        for(i = mi + 1; i < j; i++) a[i - 1] = a[i];
    }
    return e;
}
int main()
{
    long long a[64];
    int n, m, i;
    while(scanf("%d%d", &n, &m), n)
    {
        for(i = 0; i < n; i++) scanf("%lld", &a[i]);
        printf("%lld\n", E(a, n, m));
    }
    return 0;
}

重剑无锋,大巧不工
2011-12-05 16:42
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 8楼 beyondyf
不是,要是有测试数据的话就没这么纠结了...蛋疼
2011-12-05 18:27
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
而且你的程序没看大懂,能不能稍微讲一下算法?
2011-12-05 18:45
快速回复:一道应该不是很难的动规题,求找错,WA得受不了了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015109 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved