• CSP-J-2004-花生采摘


    [NOIP2004 普及组] 花生采摘 - 洛谷


    解题思路:

    1.本道题一定注意审题,是找到花生最多的地方,然后判断是否能采摘,如果可以,再去找剩下的里面花生最多的地方,如果看懂了这里,这道题其实用不着搜索,最优等方案,直接模拟即可

    2.首先输入数据,判断每个地方是否有花生,如果有的话,将此处花生的行号,列号,数目存入到结构体数组node

    3.时间是给定的t,除去从路边跳到第一行和从第一行跳回到路边的时间,t=t-2

    4.根据花生的数量对结构体数组进行降序排序

    5.设置每一步的起点和终点,刚开始的起点比较特殊,行号为第一行,列号和排好序的数组下标位置1的列号相等,意思是直线走即可

    6.创建了一个计算时间T的函数,输入目的地的行号和列号,还有此时的位置,如果从当前位置能走到下一步,并且能从目的地回去的话,那么此处的花生可以采摘,花生累加,时间更新(注意这里的时间还是去下一个地方和采摘花生的时间,不减去返回的时间,返回的时间只是用来判断能否回去,必须保证到达一个新地点后,既能采摘完,还得再回到第一行)

    7.当发现时间不够用的时候,或者采摘完所有的花生后,退出循环,输出sum


    1. #include
    2. using namespace std;
    3. int a[25][25];
    4. struct node{
    5. int x;//该花生的行号
    6. int y;//该花生的列号
    7. int num;//该花生的数目
    8. }mm[1000];
    9. bool cmp(node aa,node bb)
    10. {
    11. return aa.num>bb.num;//花生数量按照降序排序
    12. }
    13. int T(int aa,int bb,int cc,int dd)//计算去下一个地点采摘花生并返回第一行的时间
    14. {
    15. int ans=fabs(aa-cc)+fabs(bb-dd)+1+aa-1;
    16. return ans;
    17. }
    18. int main()
    19. {
    20. int m,n,t,temp=0;
    21. cin>>m>>n>>t;
    22. for(int i=1;i<=m;i++)//输入数据
    23. {
    24. for(int j=1;j<=n;j++)
    25. {
    26. cin>>a[i][j];
    27. if(a[i][j]!=0)//如果这个地点有花生
    28. {
    29. mm[++temp].x=i;//标记行号
    30. mm[temp].y=j;//标记列号
    31. mm[temp].num=a[i][j];//标记数量
    32. }
    33. }
    34. }
    35. t=t-2;//除去从路边到花生地和花生地到路边的时间
    36. sort(mm+1,mm+temp+1,cmp);//对数量降序排序
    37. int start_x=1,start_y=mm[1].y;//确定起点的行号列号
    38. int flag=1,sum=0;//结构体数组的书签
    39. while(1)
    40. {
    41. if(flag>temp)//如果书签超过总数量
    42. break;//结束循环
    43. if(t-T(mm[flag].x,mm[flag].y,start_x,start_y)>=0)//如果时间够去下一个地方并且还能返回的话
    44. {
    45. sum=sum+mm[flag].num;//加上这个地点的花生数量
    46. t=t-T(mm[flag].x,mm[flag].y,start_x,start_y)+mm[flag].x-1;//时间更新,但是并没有返回到起点
    47. start_x=mm[flag].x;//当前的位置变为起点
    48. start_y=mm[flag].y;
    49. flag++;//书签移动,去下一个点
    50. }
    51. else//如果时间不够去下一个地方采摘并且原路返回的话
    52. break;//结束程序
    53. }
    54. cout<//输出结果
    55. return 0;
    56. }

  • 相关阅读:
    Flink - 大规模状态 ValueState 实践与优化
    某计费管理系统任意文件读取漏洞
    Redis+Caffeine两级缓存,让访问速度纵享丝滑
    【阿旭机器学习实战】【6】普通线性线性回归原理及糖尿病进展预测实战
    oracle数据库老是死 怎么处理?
    【2017年数据结构真题】
    [HDLBits] Exams/ece241 2013 q7
    Linux操作系统入门(适用java软件开发)
    ROS1云课→04功能包
    ssm+vue的公司人力资源管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
  • 原文地址:https://blog.csdn.net/weixin_60869516/article/details/126457811