切换到宽版
  • 27755阅读
  • 50回复

关于采药问题 [复制链接]

上一主题 下一主题
离线q422158622
只看该作者 10 发表于: 2006-11-14
不懂~~~~~~~~~~~~
离线wing
只看该作者 11 发表于: 2006-11-14
...
贪心只能局部最优,学过动规没?
离线archimedes

只看该作者 12 发表于: 2006-11-15
DP!
去年我做的时候用的贪心,才得20分
离线zxf
只看该作者 13 发表于: 2006-11-15
背包问题改了一下嘛 怎么会看不懂呢 比背包还简单
离线cks2074243
只看该作者 14 发表于: 2006-11-17
晕哦,这位妇女侠能否解读一下这份程序。特别是精华部分,谢谢
离线zxf
只看该作者 15 发表于: 2006-11-17
什么态度?!“妇女侠”是什么东东啊!!
离线zxf
只看该作者 16 发表于: 2006-11-17
把数字带进去试试不就知道了么。
因为不能重复,所以就边读边判断加上该物品价值是否大于不加嘛
离线maxwell_1992
只看该作者 17 发表于: 2006-11-18
贪心肯定不行的,是去年用的是深搜,拿了40分!这是01背包问题!
附件: 背包问题.ppt (207 K) 下载次数:32
离线bill
只看该作者 18 发表于: 2006-11-23
最明显的DP题啊!
离线侦察机人
只看该作者 19 发表于: 2006-11-27
我会,不过是C++
用动态规划
#include<fstream>
using namespace std;
ifstream fin("medic.in");
ofstream fout("medic.out");
int t,m,ans;
int countline[1001];
struct data
{
    int time;
    int price;
}med[101];

main()
{
  int indata();
  int count();
  indata();
  count();
  fout<<ans; 
}

int indata()
{
  int i;
  fin>>t>>m;
  for(i=1;i<=m;i++)
    fin>>med[i].time>>med[i].price;
}
int count()
{
  int i,j,k;   
  memset(countline,0,sizeof(countline)) ;
  for(i=1;i<=m;i++)
    for(j=t;j>=1;j--)
      {
        if (j>=med[i].time&&med[i].price+countline[j-med[i].time]>countline[j])
          countline[j]=med[i].price+countline[j-med[i].time];
      }
  ans=countline[t];
   
}
快速回复
限100 字节
 
上一个 下一个