您的位置:首页 > 其它

SDIBTOJ1350-最小重量机器设计问题

2012-12-04 14:52 267 查看

题目链接:http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=1350

题目描述:给出n个部件在m个商家的价格,及其制造的重量,求在不大于给定价格d下,最小的重量。

题意分析:很经典的深搜回溯。我加了几组还算强大的测试数据,下列代码中的几个剪枝必须有哦,才能在OJ通过。否则,嘿嘿,等着TLE吧。

代码如下:

#include

 

#define INF 999999999

 

int w[22][22];  //存重量

int c[22][22];  //存价格

int v[22];  //存搜索过程中部件的制造商

int s[22];  //存符合条件的最优重量部件的制造商编号

int m, n, d;

int min, minw, maxc;

 

void DFS( int t, int p, int cnt ){

    int i;

    if( t > n){

       if( cnt < min ){

           min = cnt;

           for( int i=1; i<=m; i++ )

               s[i] = v[i];

       }

       return ;

   }
   //当前重量值已经比最小重量值大了,或者现有价格>给定价格,就没有必要继续了   

    if( cnt >min || d < p ){  

       return ;

    }

    for( i=1;i<=m; i++ ){

       if( d >= p + c[t][i] ){

           v[t] = i;

           DFS( t+1, p+c[t][i], cnt+w[t][i] );

       }

    }

}

 

int main(){

    int i,j;

    int tmp,r;

    while(scanf( "%d%d%d", &n, &m, &d ) != EOF ){

       maxc = minw = 0;

       for( i=1; i<=n; i++ ){

           for( j=1; j<=m; j++ ){

               scanf( "%d", &c[i][j] );

               if( j == 1 ) { tmp = c[i][j]; }

               else if( tmp < c[i][j] )  { tmp = c[i][j];}

           }

           maxc += tmp;

       }

    

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  搜索