tywofxd


私信TA

用户名:tywofxd

访问量:574

签 名:

排  名 622
经  验 1178
参赛次数 0
文章发表 20
年  龄 0
在职情况
学  校 西安电子科技大学
专  业

  自我简介:

TA的其他文章

解题思路:

利用贪心的思想,每一步有两种选择,把这两种选择的结果都算出来,选最优的选择,每一步都选最优的选择
(我是参考Newguy_同学的思路,不过用c实现

注意事项:

参考代码:

#include<stdio.h>

//贪心思想,每走一步,都有两种选择,flash或者跑,每次都选择可以逃得更远的那种 

int main()

{

int M,S,t,i=0;

int flash=0,sum=0;//flash记录可以如果某一步选“闪”,能逃多远;sum先记录如果自己跑,能逃多远,然后和flash比较,最后取能逃得更远的那个数 

scanf("%d%d%d",&M,&S,&t);

for(i=1;i<=t;i++)//将闪移和跑步分卡考虑,优先考虑闪移(因为魔法够的话,显然“闪”比较快) 

{

if(M>=10)//魔法点数大于10,就“闪” 

{

flash=flash+60;

M=M-10;

}

else//否则休息,加魔法点 

M=M+4;

sum=sum+17;//如果这一步选自己跑,能跑多远 

if(sum<flash)//最终sum存储这一步的最优选择 

sum=flash;

if(sum>=S)

{

printf("Yes\n%d",i);

break;

}

}

if(i>t)

{

printf("No\n");

printf("%d\n",sum);

}

return 0;

}


  评论区

#include <stdio.h>
 
int main()
{
 long m=0,s=0,t=0;
 long es=0,et=0;
 scanf("%ld %ld %ld",&m,&s,&t);
 //第一阶段
 while(m>=10){
     es=es+60;
     et=et+1;
     m=m-10;
 }
 //二阶
 while(s-es>120){
     while(m<10){
         et++;
         m=m+4;
     }
     m=m-10;
     es=es+60;
 }
 while(s-es<120 && s-es>60){
     if(m>=2){
             while(m<10){
             et++;
             m=m+4;
         } 
         m=m-10;
         es=es+60;
     }
     else if(m<2){
             while (s-es>60){
                 et++;
                 es=es+17;
             }
     }
 }
 //int ss=0;
 //ss=s-es;
 while
2018-11-21 22:41:52 | |
  • «
  • 1
  • »