hdu 1494 跑跑卡丁车

Problem : 1494 ( 跑跑卡丁车 )     Judge Status : Accepted
//每个赛段有两种选择:放N2O和不放,所有的能量状态就有15种,我们总是选择用时最短的,要注意最后能量爆满清零时也可能获得最优解。 #include<iostream>
using namespace std ;
#define E 15
int main ()
{

    long int
i ,j ,k ,m ,n ;
    long int
aaa [ 102 ],bbb [ 102 ],eng [E ],eng1 [E ];
    long
cost ;
    while
(scanf ( "%ld%ld" ,&n ,&m )!=EOF )
    {

        for
(i = 1 ;i <E ;i ++)
            eng [i ]= 1000000 ;
        cost = 1000000 ;
        eng [ 0 ]= 0 ;
        for
(i = 0 ;i <n ;i ++)
            scanf ( "%ld" ,&aaa [i ]);
        for
(i = 0 ;i <n ;i ++)
            scanf ( "%ld" ,&bbb [i ]);

        eng1 [ 0 ]= 1000000 ;
        for
(i = 0 ;i <m ;i ++)
            for
(j = 0 ;j <n ;j ++)
            {
for (k = 0 ;k <E - 1 ;k ++) {
                    eng1 [k + 1 ]=eng [k ]+aaa [j ];
                    if
(k > 4 &&eng [k ]+bbb [j ]<eng1 [k - 5 ])
                    {

                        eng1 [k - 5 ]=eng [k ]+bbb [j ];
                    }
                }

                if
(eng [E - 1 ]+bbb [j ]<eng1 [E - 6 ])
                    eng1 [E - 6 ]=eng [E - 1 ]+bbb [j ];
                if
(eng [E - 1 ]+aaa [j ]<eng1 [E - 5 ])
                    eng1 [E - 5 ]=eng [E - 1 ]+aaa [j ];
                for
(k = 0 ;k <E ;k ++)
                    eng [k ]=eng1 [k ];
                eng1 [ 0 ]= 1000000 ;
            }


        for
(i = 0 ;i <E ;i ++)
            if
(cost >eng [i ])
                cost =eng [i ];
        cout <<cost <<endl ;
    }

    return
0 ;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值