zwdxcc  
日历
<2026年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
统计
  • 随笔 - 1
  • 文章 - 2
  • 评论 - 0
  • 引用 - 0

导航

常用链接

留言簿

随笔档案

文章档案

搜索

  •  

最新评论

 
#include <stdio.h>
#include 
<tchar.h>
#include 
<time.h>
#include 
<stdlib.h>
#include 
<iostream>
#define p_n 30
#define p_c 10000


using namespace std;

void sortbyVW(int *sn_v,int *sn_w)
{
    
for(int j=0;j<p_n;j++)    
    
{
        
int v_temp=0;
        
int w_temp=0;
        
for(int i=0;i<p_n-j-1;i++)
          
if(float(sn_v[i]/sn_w[i])<=float(sn_v[i+1]/sn_w[i+1]))
          
{
            v_temp
=sn_v[i];
            sn_v[i]
=sn_v[i+1];
            sn_v[i
+1]=v_temp;
            w_temp
=sn_w[i];
            sn_w[i]
=sn_w[i+1];
            sn_w[i
+1]=w_temp;

          }

    }


}

float KNAPSACK(int n, float c, int *v, int  *w,float  *x) {
    
int i;
    
float nowvalue=0;
    
for(i=0; i<n; i++)
        x[i]
=0.0;
    
float cu=c;
    
for(i=0; i<n; i++)
    
{
        
if(w[i]<cu)
            x[i]
=1.0;
        
else 
        
{
            x[i]
=cu/w[i];
        
for(;i<n-1;i++
            x[i
+1]=0;
        }

        cu
= cu-w[i]*x[i];
        nowvalue
+=x[i]*w[i]*v[i];
     }

    
for(i=0;i<p_n;i++)
    
{
       
if(i%9==0)
          printf(
"\n");
        printf(
"%f ",x[i]);
    }

      printf(
"\n");
    
return nowvalue;
}


int main()
{
    clock_t start,end;
    
int value[p_n],weight[p_n];
    
float nv,p_x[p_n];
    
int i;
    start 
= clock();
    srand(
int(time(NULL)));
    
for(i=0;i <p_n; i++)
        weight[i] 
=((( rand()%2000)+1));
    srand(
int(time(NULL)));
    
for(i=0;i<p_n;i++)
        value[i]
=((rand()%3000)+1);
    printf(
"随机出来的重量各是:");
    
for(i=0;i<p_n;i++)
     
{
      
if(i%10==0)
          printf(
"\n");
      printf(
" %d",weight[i]);
     }

    printf(
"\n随机出来的价格各是:");
    
for(i=0;i<p_n;i++)
    
{
        
if(i%10==0)
          printf(
"\n");
        printf(
" %d ",value[i]);
    }

    sortbyVW(value,weight);
    printf(
"\n随机出来的重量排序后各是:");
    
for(i=0;i<p_n;i++)
     
{
         
if(i%10==0)
          printf(
"\n");
        printf(
" %d ",weight[i]);
     }

    printf(
"\n随机出来的价格排序后各是:");
    
for(i=0;i<p_n;i++)
    
{
         
if(i%10==0)
          printf(
"\n");
        printf(
" %d",value[i]);
    }

    nv
=KNAPSACK(p_n, p_c, value, weight, p_x);
    end
=clock();
    printf(
"%d ,%d, %d, %f\n", p_n,p_c, (end-start),nv);
    getchar();
    
return 0;
}

posted on 2011-04-11 12:21 张卫东 阅读(134) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理


 
Copyright © 张卫东 Powered by: 博客园 模板提供:沪江博客