zoukankan      html  css  js  c++  java
  • p1532

    这题看上去是难度为2的省选题,类型里写的是搜索,但是真的不是一个模拟水题么?

    考虑最最小的解应该是输入个位数,然后是个位数加减2,然后是输入-两位数,然后是个位数加加加加加或者减减减减减,然后是-两位数加加加加加或者减减减减减。那么就挨个考虑每种情况呗。

    具体实现看代码

    using namespace std;
    int i,f;
    int top,end,ans[200];
    bool t[20];
    bool shang,xia,gang;
    int main()
    {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    //freopen("123.in","r",stdin);
    //freopen("123.out","w",stdout);
        cin>>t[1]>>t[2]>>t[3]>>shang>>t[4]>>t[5]>>t[6]>>xia>>t[7]>>t[8]>>t[9]>>gang>>t[0];
        cin>>top>>end;
        for(i=0;i<=99;i++)
            ans[i]=2000;
        ans[top]=0;//直接就在top了,答案是0
    
        for(i=0;i<=9;i++)
            if(t[i])
                ans[i]=min(ans[i],1);//个位数的台是可能可以1步达到的,它要求对应的数能用
        if(gang)//十位数的台要三位,它要求gang和那俩数字能用
            for(i=1;i<=9;i++)
                for(f=0;f<=9;f++)
                    if(t[i]&&t[f])
                        ans[i*10+f]=min(ans[i*10+f],3);
    
        if(shang)//考虑加加加加,更新答案
            for(i=0;i<=99;i++)
                for(f=1;f<=99;f++)
                    ans[(i+f)%100]=min(ans[(i+f)%100],ans[i]+f);
        if(xia)//考虑减减减减,更新答案
            for(i=0;i<=99;i++)
                for(f=1;f<=100;f++)
                    ans[(i-f+100)%100]=min(ans[(i-f+100)%100],ans[i]+f);
    
        if(ans[end]==2000)//最大的解也不过是它小一的两位数减减减或者它大一的两位数加加加得到,为100.一旦更新至少比2000小啊,现在发现还是2000说明没有被更新过,这个台用不了了,输出-1
            cout<<-1;
        else cout<<ans[end];
    }
  • 相关阅读:
    Nginx的启动、停止与重启
    用Java实现链表结构对象:单向无环链表
    java匿名内部类详解
    如何统计博客园的个人博客访问量
    Java 读写Properties配置文件
    java的枚举类型Enum解释
    接口测试框架1
    python几道简单的算法题
    很全的 Python 面试题
    有有面试
  • 原文地址:https://www.cnblogs.com/qywyt/p/9467433.html
Copyright © 2011-2022 走看看