| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2153 人关注过本帖
标题:一道编程题,求指导
只看楼主 加入收藏
longxingxiu
Rank: 2
等 级:论坛游民
帖 子:73
专家分:64
注 册:2014-4-23
收藏
得分:0 
回复 10 楼 刘欣 2
这个想法不错,但是在将超出的钱与所有数目的价格相减的过程中要添加一个条件,就是超出的价格A与所有书目价格对比(从大到小),遇到第一个不大于A的数目时,做出判断,如果去掉这本书以后,得到新的超出的价格A1与剩下的书价相比是否有小于或者等于A1的,若有,则这本书可以退掉,若没有,则不能退掉(这个条件必须有,也就是说我有可能退掉两本或者三本价格更小的书比只退一本价格高的书更适合)。

比如五本书价格分别为9、8、5、5、3,工资设为20,理论上最合适的组合是9、8、3;算法过程:1、sum=30;2、差价A1=30-20=10;3、10与五本书价格相比,第一个9比它小,如果去除的话,差价A2=1,但是找不到比1小的数目了,不能去掉,接下来改为去掉8,差价A2=2,还是不行,改为去掉5,可以那么去掉5这本书,剩下的9、8、5、3递归知道差价小于等于零结束。
2014-05-15 13:50
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
一道 DP 题

ans[i] 表示 工资为 i 时,最多花的钱

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

#define MAX 2000

int main(int argc, char *argv[])
{
    int S, n, p[MAX], ans[MAX];

    while (scanf("%d", &S) != EOF)
    {
        scanf("%d", &n);
        for (size_t i = 0; i < n; i++)  scanf("%d", &p[i]);
        for (size_t s = 0; s <= S; s++)  ans[s] = 0;
        for (size_t i = 0; i < n; i++)
        for (size_t s = S; s >= p[i]; s--)
        {
            if (ans[s] + p[i] <= s)  ans[s] += p[i];
            else if (ans[s] < p[i] + ans[s - p[i]])
                ans[s] = p[i] + ans[s - p[i]];
        }
        printf("%d\n", ans[S]);
    }
    return 0;
}


[fly]存在即是合理[/fly]
2014-05-15 14:27
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
版主这个方法不错。
R:\>a
10
3
2
3
4
Ans: 0,0,0,0,0,0,0,0,0,0,2,
Ans: 0,0,0,0,0,0,0,0,0,2,2,
Ans: 0,0,0,0,0,0,0,0,2,2,2,
Ans: 0,0,0,0,0,0,0,2,2,2,2,
Ans: 0,0,0,0,0,0,2,2,2,2,2,
Ans: 0,0,0,0,0,2,2,2,2,2,2,
Ans: 0,0,0,0,2,2,2,2,2,2,2,
Ans: 0,0,0,2,2,2,2,2,2,2,2,
Ans: 0,0,2,2,2,2,2,2,2,2,2,
Ans: 0,0,2,2,2,2,2,2,2,2,5,
Ans: 0,0,2,2,2,2,2,2,2,5,5,
Ans: 0,0,2,2,2,2,2,2,5,5,5,
Ans: 0,0,2,2,2,2,2,5,5,5,5,
Ans: 0,0,2,2,2,2,5,5,5,5,5,
Ans: 0,0,2,2,2,5,5,5,5,5,5,
Ans: 0,0,2,2,3,5,5,5,5,5,5,
Ans: 0,0,2,3,3,5,5,5,5,5,5,
Ans: 0,0,2,3,3,5,5,5,5,5,9,
Ans: 0,0,2,3,3,5,5,5,5,9,9,
Ans: 0,0,2,3,3,5,5,5,7,9,9,
Ans: 0,0,2,3,3,5,5,7,7,9,9,
Ans: 0,0,2,3,3,5,6,7,7,9,9,
Ans: 0,0,2,3,3,5,6,7,7,9,9,
Ans: 0,0,2,3,4,5,6,7,7,9,9,
9

2014-05-15 15:37
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 32 楼 azzbcc
版主这个是自己想出来的吗,还是经验?虽然只有几行,试数的时候花了不少时间
2014-05-15 17:28
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
我哪里想得出来。。。

只是觉得和背包问题很相似,就那样建模了。


[fly]存在即是合理[/fly]
2014-05-15 18:16
快速回复:一道编程题,求指导
数据加载中...
 
   



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

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