Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17202
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 354
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-15 22:04
文章分类

全部博文(37)

文章存档

2014年(37)

我的朋友

分类: C/C++

2014-07-15 22:16:27

#include "OJ.h" 
#include "iostream"  
#include "string"  
using namespace std; 


/*
功能:


输入参数:int*p 指向二维数组的首地址,该二维数组第0行的两个数分别表示:总钱数<30000,和希望购买物品的个数<25;
          该数组从第1行到第m行(1<=j<=m)中给出了编号为j的物品的基本数据,每行有2个非负整数,
 表示该物品的价格(<=10000)和该物品的重要度(1~5)。


 GetResult表示不超过总钱数的物品的价格与重要度乘积的总和的最大值(<100000000)。


 不需做入参检查,测试用例可以保证~
 
    例如:4000 8(第0行)
 821 3  (第1行)
 422 5
 458 5
 500 3
 200 2
 430 4
 530 3
 239 3
 
 则表示 总钱数为4000,希望购买物品个数为8个,因此从第1行到第8行表示编号为j的物品的价格及物品的重要度。

          



返回值:无


温馨提示:根据题意可知,该二维数组只有两列,且行数为第0行的第二个元素数值+1;入参p不能按照二维数组的方法来取值,要将
          二维的转换成一维的哦~


*/


void GetResult(int*p,int& Get_Result)
{  
    int money=p[0],numMax=p[1],valueMax=0,temp,i,j;  
    int f[30000]={0},v[100],w[100];  
    for (i=2,j=1;i<2*numMax+1;i++,j++)  
    {  
        v[j]=p[i];  
        i++;  
        w[j]=p[i];  
    }  
    for(i=1;i<=numMax;i++)    
    {  
        for(j=money;j>=v[i];j--)    
        {  
            temp=f[j-v[i]]+v[i]*w[i];    
            if(temp>f[j])    
                f[j]=temp;    
        }    
    }  
    Get_Result=f[money];  






阅读(1381) | 评论(0) | 转发(0) |
0

上一篇:Home+Work

下一篇:字节流解析

给主人留下些什么吧!~~