| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2153 人关注过本帖
标题:一道编程题,求指导
只看楼主 加入收藏
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:7 
这是一道相对简单的优化问题,建立目标函数Salary_max,约束条件为Si、Ni和Pi。不追求运行速度的话就采用遍历法;否则采用点计算智能的方法。

梦想拥有一台龙芯3A-4000
2014-05-14 17:04
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 10 楼 刘欣 2
可以重复买一本书吗?
2014-05-14 17:16
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 11 楼 ditg
我没明白,入门不深
2014-05-14 17:16
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
是否可重复都有类似的建模方式,如果没研究过的话有点麻烦了,我只能提供一个方向性的意见吧,非线性规划问题(自己查资料),问题不难,但解空间的规模可能很大。

梦想拥有一台龙芯3A-4000
2014-05-14 17:27
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
Salary_max = X1 * P1 + X2 * P2 + ... + Xn * Pn

0 < Salary < 2000; (用户输入的数据)

n --- 书的类别;
Pi--- 书的单价;
Xi--- 每种书的值域。 [0, Salary / Pi], 其中0代表不买,Salary / Pi代表最多可买数量。

求满足0 < Salary_max < 2000的Salary_max。

梦想拥有一台龙芯3A-4000
2014-05-14 17:51
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
求满足0 < Salary_max <= Salary的Salary_max。

梦想拥有一台龙芯3A-4000
2014-05-14 17:55
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 16 楼 ditg
还是不太懂,等之后学到这个先
2014-05-14 20:10
岑吼吼
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-5-10
收藏
得分:0 
回复 10 楼 刘欣 2
我按照你的想法写出来,好像不太对,你有代码能让我参考参考吗
2014-05-14 20:12
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
那是我水平问题,呵呵(下面程序仅用于说明问题):
已知:书的单价Pi (i = 1 to n)

max = 0;
for (X1 = 0 to Salary/P1)
    for (X2 = 0 to Salary/P2)
        ... ...
            for (Xn = 0 to Salary/Pn) {
                  Salary_max = X1 * P1 + X2 * P2 + ... + Xn * Pn;
                  if (Salary_max <= Salary && Salary_max > max)
                         max = Salary_max;
                  }
printf(max);

梦想拥有一台龙芯3A-4000
2014-05-15 01:12
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
昨天研究了一下深度优先搜索求解迷宫问题,此问题也不难解决。代码如下:
程序代码:
#include <stdio.h>
#define MAX_GROUP 1000
#define MAX_BOOK 2000

int i;
int res[MAX_GROUP], res_count = 0;
int max_sum;
int found;
int wage, n, p[MAX_BOOK + 1], sel[MAX_BOOK + 1];

void input_and_sort_data()
{
    int i, j, m, t;
    for ( i = 1; i <= n; i++ ) {
        printf ( "输入第 %d 本书的价格:", i );
        scanf( "%d", &p[i] );
    }
    for ( i = 1; i < n; i++ ) {
        m = i;
        for ( j = i + 1; j <= n; j++ ) {
            if ( p[m] > p[j] ) m = j;
        }
        t = p[m];
        p[m] = p[i];
        p[i] = t;
    }
}

void book_try( int k, int sum )
{
    int i;
    if ( sum == wage ) {
        max_sum = sum;
        found = 1;
        return;
    } else if ( sum > max_sum ) {
        max_sum = sum;
    }
    for ( i = sel[k] + 1; i <= n; i++ ) {
        sel[k + 1] = i;
        if ( sum + p[sel[k + 1]] <= wage ) {
            book_try( k + 1, sum + p[sel[k + 1]] );
            if ( found ) return;
        } else {
            return;
        }
    }
}


int main( void )
{
    p[0] = sel[0] = 0;
    while ( 1 ) {
        printf ( "输入工资:" );
        if ( scanf( "%d", &wage ) == EOF ) break;
        printf ( "输入书的种类:" );
        scanf( "%d", &n );
        input_and_sort_data();
        max_sum = 0;
        found = 0;
        book_try( 0, 0 );
        res[res_count++] = max_sum;
    }
    printf ( "\n" );
    for ( i = 0; i < res_count; i++ ) printf ( "%d\n", res[i] );
    return 0;
}

2014-05-15 11:27
快速回复:一道编程题,求指导
数据加载中...
 
   



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

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