主题:[讨论]关于NOIP2006第2题~~~
abcwuhang
[专家分:1840] 发布于 2007-03-03 17:36:00
请问我用递归做此题,但结果总少一点,为什么???
//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个回复)
沙发
bigchen [专家分:1940] 发布于 2007-03-03 17:58:00
这题我认为用动态规划会比较好
0\1背包
很简单的!
板凳
游侠UFO [专家分:1200] 发布于 2007-03-03 21:19:00
当时我拿到题后第一个反应就是01背包,只可惜DP学得差,还是没做出来..........
3 楼
bigchen [专家分:1940] 发布于 2007-03-03 21:48:00
我当时看到题目
也是一眼就看出是DP
可是从我们学校最后决赛的培训成绩看
我DP是学得最垃圾的算法
有时候连不经过变形的题目都做不出来
而且今年NOIP题目十分简单
我居然得分只有一位数
悔恨哪!!!!!!!!
我为什么不把DP学好
4 楼
编程黑客 [专家分:1660] 发布于 2007-03-03 21:49:00
嘿,说清楚是普及组还是提高组啊????
楼上的两位你们不是一个组的
5 楼
游侠UFO [专家分:1200] 发布于 2007-03-04 10:46:00
从楼主的代码的注释来看这应该是提高组的第二题.至于普及组的题如何就不清楚了...
6 楼
abcwuhang [专家分:1840] 发布于 2007-03-04 16:31:00
PLEASE PAY SOME ATTENTION!!!
我说的是普及组
xxxxxxx
7 楼
abcwuhang [专家分:1840] 发布于 2007-03-04 16:43:00
请对我的程序的问题提出建议或意见!!~~~
8 楼
abcwuhang [专家分:1840] 发布于 2007-03-04 17:19:00
我知道了!!!在第14和15行之间加一句if big<s then big:=s;就OK了
9 楼
bigchen [专家分:1940] 发布于 2007-03-04 21:27:00
看来普及组和提高组这次第二题都是用DP
不过结果都是一样的
没有分得!
10 楼
编程黑客 [专家分:1660] 发布于 2007-03-06 22:28:00
能说说算法吗???
我来回复