回 帖 发 新 帖 刷新版面

主题:[讨论]关于NOIP2006第2题~~~

请问我用递归做此题,但结果总少一点,为什么???
//PS:我的程序//
program happyjinming;
var cost,zy:array [1..30000] of longint;(cost代表钱数,zy代表重要度)
    m,n,ii,big,s:longint;
procedure digit(x,y:longint);
var i:longint;
begin
  for i:=y to n do
    if (x-cost[i]>=0) then
    begin
      s:=s+cost[i]*zy[i];
      digit(x-cost[i],i+1);
      s:=s-cost[i]*zy[i];
    end
                      else if big<s then big:=s;
end;
begin
  s:=0;
  readln(m,n);
  big:=0;
  for ii:=1 to n do
    readln(cost[ii],zy[ii]);
  digit(m,1);
  writeln(big);
end.

回复列表 (共14个回复)

沙发

这题我认为用动态规划会比较好
0\1背包
很简单的!

板凳

当时我拿到题后第一个反应就是01背包,只可惜DP学得差,还是没做出来..........

3 楼

我当时看到题目
也是一眼就看出是DP
可是从我们学校最后决赛的培训成绩看
我DP是学得最垃圾的算法
有时候连不经过变形的题目都做不出来
而且今年NOIP题目十分简单
我居然得分只有一位数
悔恨哪!!!!!!!!
我为什么不把DP学好

4 楼

嘿,说清楚是普及组还是提高组啊????
楼上的两位你们不是一个组的

5 楼

从楼主的代码的注释来看这应该是提高组的第二题.至于普及组的题如何就不清楚了...

6 楼

PLEASE PAY SOME ATTENTION!!!
我说的是普及组
xxxxxxx

7 楼

请对我的程序的问题提出建议或意见!!~~~

8 楼

我知道了!!!在第14和15行之间加一句if big<s then big:=s;就OK了

9 楼

看来普及组和提高组这次第二题都是用DP
不过结果都是一样的
没有分得!

10 楼

能说说算法吗???

我来回复

您尚未登录,请登录后再回复。点此登录或注册