首页 > 其他 > 详细

背包问题扩展

时间:2015-03-13 20:15:59      阅读:265      评论:0      收藏:0      [点我收藏+]

背包问题学习链接:

http://blog.csdn.net/kangroger/article/details/38864689

代码:

#include <stdio.h>
#include <string.h>
int invest[301][21];
int total_invest;
int company_num;
int max[301];

int main(void)
{
    int tc, T;
    
    freopen("input.txt", "r", stdin);

    setbuf(stdout, NULL);

    scanf("%d", &T);
    for(tc = 0; tc < T; tc++)
    {
        total_invest = 0;
        company_num = 0;

        memset(max, 0, sizeof(max));

        scanf("%d %d",&total_invest,&company_num);
        
        int i,j,k;

        for(i=1;i<=total_invest;i++)
        {
            for(j=0;j<=company_num;j++)
            {
                scanf("%d",&invest[i][j]);
            }
        }
        
        for(j=1;j<=company_num;j++)
        {            
            for(i=total_invest;i>=1;i--)
            {
                int tmp = -1;

                for(k=1;k<=i;k++)
                {
                    if(invest[k][j] + max[i-k] > max[i])
                    {
                        max[i] = invest[k][j] + max[i-k];
                    }
                }
            }

        }
        
        printf("%d\n",max[total_invest]);        

    }

    return 0;//Your program should return 0 on normal termination.
}

 

测试数据:

5
4 2
1 3 3
2 4 4
3 7 6
4 8 8
7 2
1 3 3
2 4 4
3 7 6
4 8 8
5 10 10
6 13 13
7 15 15
5 3
1 4 4 3
2 6 7 6
3 8 8 9
4 13 13 13
5 15 14 15
10 3
1 4 4 3
2 6 7 6
3 8 8 9
4 13 13 13
5 15 14 15
6 19 18 19
7 20 20 20
8 23 25 23
9 27 27 26
10 31 31 31
5 5
1 3 4 6 2 6
2 11 10 10 9 11
3 12 12 13 14 13
4 18 17 19 19 18
5 23 26 24 25 24

测试结果:

10
16
17
33
28

 

背包问题扩展

原文:http://www.cnblogs.com/monkeyvera/p/4335731.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!