讨论 / 大牛帮忙!!227
wangqingbaidu 2008-07-24 19:12:00
点我顶贴 收藏 删除
哪位大牛告诉我这道题怎么做?

program life;

var

int:array[1..4] of longint;

i,j,ans:longint;

begin

for i:=1 to 4 do

read (int[i]);

if int[1]>=int[4] then

begin

inc (ans,int[4]);

int[1]:=int[1]-int[4];

end

else

begin

inc (ans,int[1]);

int[1]:=0;

end;

if (int[2]=int[3]) then

begin

inc (ans,int[1] div 5);

int[1]:=0;

end;

if int[2]>=int[3] then

begin

inc (ans,int[3]);

int[2]:=int[2]-int[3];

int[3]:=int[1] mod 3;

end

else

begin

inc (ans,int[2]);

int[3]:=int[3]-int[2];

int[2]:=int[1] mod 2;

end;

if int[2]>=int[3] then

inc (ans,int[3])

else

inc (ans,int[2]);

writeln (ans);

end.

我的程序我用的是贪心为什么只能对六个点?

这道题使用搜索吗?

#1 世纪末的魔术师@2008-07-24 19:12:00
回复 删除
直接贪就可以了,不过贪得要有顺序,有6中组合方法,要按顺序来贪。。。

t1=min(a,d),t2=min(b,c);

total+=t1,a-=t1,d-=t1;

total+=t2,b-=t2,c-=t2;

for(;a>=1&&b>=2;)

a--,b-=2,total++;

for(;a>=2&&c>=1;)

a-=2,c--,total++;

for(;a>=3&&b>=1;)

a-=3,b--,total++;

for(;a>=5;)

a-=5,total++;

查看更多回复
提交回复