CF:1633D. Make Them Equal(广搜+背包)

本文介绍了一种解决关于整数数组操作获取金币问题的方法,首先通过广度优先搜索预处理最小操作次数,然后利用01背包算法优化在有限操作次数下获取最大金币数的策略。着重讨论了细节处理中如何控制操作次数和优化背包过程以应对大规模数据和限制k值的情况。

题目链接

题意:有一个大小为n的整数数组a。最初,数组所有元素都为1.

可以执行如下操作:选定一个i和任意的x(x>0)然后把ai=ai+[ai/x](向下取整)

执行所有操作后,若ai==bi,那么你可以得到ci个金币。通过执行不超过k次的操作使得获得最大的金币数量。

1->bi的最小操作数,用广搜得到。所以用广搜预处理1->1000的所有最小操作数,然后来一遍01背包即可。

细节处理:由于k太大了,但是可以发现任意一个1->bi的操作数最多为20左右,所以最多操作数总和也不过2e4左右,所以在跑背包之前先判断一下k与总操作数的大小关系;

#include <bits/stdc++.h>
using namespace std;
const int N=1005;
int n,k;
int v[N];
int b[N];
int w[N];
int cost[N];
bool flag[N];
void solve(){
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=n;i++) cin>>w[i];
    int sum=0;
    for(int i=1;i<=n;i++){
        v[i]=cost[b[i]];
        sum+=v[i];
    }
    int ans=0;
    if(sum<=k){
        for(int i=1;i<=n;i++) ans+=w[i];
        cout<<ans<<'\n';
    }else{
        static int f[1000005];
        memset(f
使用mybatis,dao里是这么写的 @Generated("org.mybatis.generator.api.MyBatisGenerator") default int updateByPrimaryKey(ZeroFxchangeOrdersModel row) { return update(c -> c.set(orderEventDate).equalTo(row::getOrderEventDate) .set(orderEventTime).equalTo(row::getOrderEventTime) .set(orderDate).equalTo(row::getOrderDate) .set(orderTime).equalTo(row::getOrderTime) .set(orderType).equalTo(row::getOrderType) .set(orderStatus).equalTo(row::getOrderStatus) .set(orderRoute).equalTo(row::getOrderRoute) .set(orderPriceValue).equalTo(row::getOrderPriceValue) .set(orderPriceScale).equalTo(row::getOrderPriceScale) .set(orderPriceCurrency).equalTo(row::getOrderPriceCurrency) .set(exchgPriceValue).equalTo(row::getExchgPriceValue) .set(exchgPriceScale).equalTo(row::getExchgPriceScale) .set(exchgPriceCurrency).equalTo(row::getExchgPriceCurrency) .set(paymentDate).equalTo(row::getPaymentDate) .set(openDate).equalTo(row::getOpenDate) .set(closeDate).equalTo(row::getCloseDate) .set(rateStatus).equalTo(row::getRateStatus) .set(dayOfRate).equalTo(row::getDayOfRate) .set(timeOfRate).equalTo(row::getTimeOfRate) .set(exchgFromValue).equalTo(row::getExchgFromValue) .set(exchgFromScale).equalTo(row::getExchgFromScale) .set(exchgFromCurrency).equalTo(row::getExchgFromCurrency) .set(exchgToValue).equalTo(row::getExchgToValue) .set(exchgToScale).equalTo(row::getExchgToScale) .set(exchgToCurrency).equalTo(row::getExchgToCurrency) .set(adjustToFixValue).equalTo(row::getAdjustToFixValue) .set(adjustToFixScale).equalTo(row::getAdjustToFixScale) .set(sumReflectedFlag).equalTo(row::getSumReflectedFlag) .set(sumReflectedTime).equalTo(row::getSumReflectedTime) .set(updUser).equalTo(row::getUpdUser) .set(updTime).equalTo(row::getUpdTime) .set(jnisaFlg).equalTo(row::getJnisaFlg) .set(realTimeType).equalTo(row::getRealTimeType) .set(ifaRealtimeFg).equalTo(row::getIfaRealtimeFg) .set(frnDepositType).equalTo(row::getFrnDepositType) .set(channelType).equalTo(row::getChannelType) .set(commissionType).equalTo(row::getCommissionType) .where(exchangeType, isEqualTo(row::getExchangeType)) .and(businessDate, isEqualTo(row::getBusinessDate)) .and(cycleNumber, isEqualTo(row::getCycleNumber)) .and(butenCode, isEqualTo(row::getButenCode)) .and(accountNumber, isEqualTo(row::getAccountNumber)) .and(orderNumber, isEqualTo(row::getOrderNumber)) .and(orderEventId, isEqualTo(row::getOrderEventId)) ); } 这是不是在代码里可以用链式调用的方式写动态sql呢?给个调用的例子
10-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值