#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
#define max(a,b) ((a)>(b)?(a):(b))
int N=10;
int M=15;
int pack(short,short,short,short*);
int pack(short n,short m,short money,short* price)
//还有n人还有money可用,可从m道菜开始点时的最大价格
{
short i;
short count=0;
if (n==1)
{
for (i=m;i<M;i++)
{
if (price[i]<=money)
{
count=max(count,price[i]);
}
}
return count;
}
else
{
if (m==M-1)
//只有一道菜可以选了
{
return (price[m]<=money?price[m]:0);
}
if(price[m]<=money)
//第m道菜的价格比剩余金钱低的话,这道菜可选可不选,else只能不选
return (max(pack(n,m+1,money,price),pack(n-1,m+1,money-price[m],price)+price[m]));
else
return pack(n,m+1,money,price);
}
}
void main()
{
short n,m,money,*price;
n=10,m=15,money=100;
price=(short*)malloc(sizeof(short)*m);
for (m=0;m<15;m++)
{
price[m]=m+1;
}
money=pack(n,0,money,price);
cout<<money<<endl;
getch();
}
PS:很鄙视只装b不做实事的人,别人发帖不是来看你们来互喷的,是来求助的。你们把喷别人的心思用来帮楼主解决这个题目的话,我想至少这个世界会多一份感激,你自己也会多一份平和。
[
本帖最后由 leaf_yyl 于 2011-8-17 08:51 编辑 ]