切换到宽版
  • 21458阅读
  • 29回复

比一比,赛一赛,谁的程序比我快系列之~2 [复制链接]

上一主题 下一主题
离线r134a
 
只看楼主 倒序阅读 0 发表于: 2006-08-03
挑战项目:ural 1200
译题如下:

ural1200 Horns and Hoofs

Time Limit: 0.25 second
Memory Limit: 16 MB(相信你不会用完哈~)


著名的投机家决定成立一家公司 "Horns & Hoofs",来生产(羊)角和(羊)蹄。最重要的是, Ostap 已经研究了市场,制造工艺,和当地条件。

经过计算,每只(羊)角可赚取 A 卢布,每只(羊)蹄可赚取 B 卢布。因为市场上已有类似的产品,因此,生产的角和蹄的总数不能超过K,否则,就会造成积压。

此外,当地管理部门每种产品还要收取一定数量的税金,每种产品每个月收取数量的平方(单位为卢布),比如,假设生产2个角和3个蹄,那么必须支付的税金为 4+9=13 卢布。

 

Input
第一行为两个实数 A 和 B (-10000 <= A,B <= 10000),精确至小数点后两位,表示生产一个角和蹄所赚取的利润。

第二行为一整数 K,生产的产品的总数。 (1 <= K <= 10000).

Output
第一行输出所能赚取的最大利润,精确到小数点后两位。第二行输出产品的最佳分配。

若有多种方案,输出角数量最小的一个,若还有多个,则输出蹄最少的。

Sample Input
34.20 61.70
45
Sample Output
1239.50
16 29


偶的成绩:
1256300 16:01:52 3 Aug 2006 1200 Pascal Accepted 0.234 142KB



勇气les,你的成绩如何?
.


祝大家明年NOIP大获全盛!


.
离线勇气les
只看该作者 1 发表于: 2006-08-04
昨天看你在URAL提交了好多好多次的说
离线r134a
只看该作者 2 发表于: 2006-08-04
引用第1楼勇气les2006-08-04 06:46发表的“”:
昨天看你在URAL提交了好多好多次的说



晕~这都被你看到了~~~


偶交了34次左右~
.


祝大家明年NOIP大获全盛!


.
离线r134a
只看该作者 3 发表于: 2006-08-04
为何我总是不能AC?~~~~~
.


祝大家明年NOIP大获全盛!


.
离线stevenjl

只看该作者 4 发表于: 2006-08-30
这个谁教我一下
Dream Walker...
离线r134a
只看该作者 5 发表于: 2006-08-30

~~~~程序垃圾,没有什么技术含量~~~见笑了~



var tim,top,s,mins,a,b:real;
  i,j,mi,mj,k:integer;
begin
readln(a,b);
readln(k);
mi:=-1;
mj:=-1;
top:=0;
tim:=0;

mins:=-maxlongint;
for i:=0 to k do
for j:=0 to k-i do
  begin
  s:=i*a+j*b-i*i-j*j;
  if tim=1 then top:=top+1;

  if s>mins then
    begin
    tim:=1;
    top:=0;

    mins:=s;
    mi:=i;
    mj:=j;
    end;
  if top>9998 then break;     (本人的垃圾掐时)
  end;
writeln(mins:0:2);
writeln(mi,' ',mj);
end.
.


祝大家明年NOIP大获全盛!


.
离线stevenjl

只看该作者 6 发表于: 2006-08-30
如果要掐时,用tim这个变量干什么?
Dream Walker...
离线r134a
只看该作者 7 发表于: 2006-08-30
“tim” means “time” :只是一个标记,掐时过程的一部分。

每当找到一个更优解:
if s>mins then
  begin
    tim:=1; (将计数器置空)
    top:=0; (将计数器置空)

    mins:=s; (更新最优解)
    mi:=i; (记下最优解)
    mj:=j; (记下最优解)
  end;


每当找到一个最优解后就将计数器置空,重新开始记数~~~如果发现已经记了 9998 次还没有得到更好的解就exit :
        if top>9998 then break;   (本人的垃圾掐时)
.


祝大家明年NOIP大获全盛!


.
离线r134a
只看该作者 8 发表于: 2006-08-30
MS/ “tim” 可以省掉~~~
.


祝大家明年NOIP大获全盛!


.
离线stevenjl

只看该作者 9 发表于: 2006-08-30
1288280 21:47:23 30 Aug 2006 oifans1 1200 C Accepted 0.046 222 KB

说来惭愧啊……在一个初一学生的教导下,终于知道剪枝的所在~
  1. #include <stdio.h>
  2. int max1,max2;
  3. main()
  4. {
  5.   double p1,p2,max;
  6.   int n1,n2,i,j,temp,n,m1,m2;
  7.   int *horn,*hoof;
  8.   scanf("%lf%lf", &p1, &p2);
  9.   scanf("%d",&n);
  10.   if (p1 < 0) p1=0;
  11.   if (p2 < 0) p2=0;
  12.   if (p1 < p2)
  13.   {
  14.   double temp;
  15.   temp=p1; p1=p2; p2=temp;
  16.   horn=&j;
  17.   hoof=&i;
  18.   }
  19.   else {horn=&i; hoof=&j;}
  20.   max=0;
  21.   m1=floor(p1/2)+1;
  22.   m2=floor(p2/2)+1;
  23.   for (i=0; i <= ((n<m1) ? n : m1); i++){
  24.   for (j=0,temp=((m2 <(n -i))? m2:n-i); j <= ( (i < temp) ? i: temp);j++)
  25.     {
  26.     double sum;
  27.     sum= i*p1 + j*p2 - i*i -j*j;
  28.     if (sum > max)
  29.       {
  30.       max=sum;
  31.       max1=*horn;
  32.       max2=*hoof;
  33.       }
  34.     else if (sum == max)
  35.       {
  36.       if (*horn < max1){max1=*horn; max2=*hoof;}
  37.       else if (*horn == max1){if (*hoof < max2){max1=*horn; max2=*hoof;}};
  38.       }
  39.     }
  40.     }
  41.   printf("%.2f\n",max);
  42.   printf("%d%s%d\n",max1," ",max2);
  43.   return 0;
  44. }
Dream Walker...
快速回复
限100 字节
 
上一个 下一个