zoukankan      html  css  js  c++  java
  • “玲珑杯”ACM比赛 Round #18 C -- 图论你先敲完模板(和题目一点关系都没有,dp)

    题目链接:http://www.ifrog.cc/acm/problem/1146?contest=1020&no=2

    题解:显然知道这是一道dp而且

    dp[i]=min(dp[j]+2^(x[j]-x[i])+a,dp[i])但是这题很显然2的次幂显然很容易比a大于是只要for一遍最多30次就行具体看一下代码,炒鸡简单的。

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    #include <queue>
    #define inf 10000000000000000
    using namespace std;
    typedef long long ll;
    const int M = 1e5 + 10;
    int x[M] , t , n , a;
    ll dp[M] , Pow[65];
    int main() {
        scanf("%d" , &t);
        Pow[0] = 1;
        for(int i = 1 ; i <= 63 ; i++) Pow[i] = Pow[i - 1] * (ll)2;
        while(t--) {
            scanf("%d%d" , &n , &a);
            for(int i = 0 ; i < n ; i++) scanf("%d" , &x[i]) , dp[i] = inf;
            dp[0] = 0;
            for(int i = 1 ; i < n ; i++) {
                int gg = i - 1 , count = 1;
                while((gg + 1)) {
                    if(count >= 30 || x[i] - x[gg] > 30) break;
                    dp[i] = min(dp[gg] + Pow[x[i] - x[gg]] + a , dp[i]);
                    gg--;
                    count++;
                }
            }
            printf("%lld
    " , dp[n - 1]);
        }
        return 0;
    }
  • 相关阅读:
    MySQL的备份和恢复-mysqldump
    MySQL日志功能详解
    MySQL查询缓存
    MySQL的用户管理
    doc常用命令
    记录mysql语句
    centos常用命令
    centos 7.6
    centos6 常用命令
    centos6.8 安装软件
  • 原文地址:https://www.cnblogs.com/TnT2333333/p/7184725.html
Copyright © 2011-2022 走看看