首页 > 其他分享 >[ARC105C] Camels and Bridge 题解

[ARC105C] Camels and Bridge 题解

时间:2024-11-13 19:08:13浏览次数:1  
标签:ARC105C do Bridge int 题解 Camels

[ARC105C] Camels and Bridge 题解

https://www.luogu.com.cn/problem/AT_arc105_c

记:这是24年夏天在北京梦熊写的(模拟赛撞原),希望这年夏天 fowever 。

sol

首先 \(n\) 很小,所以可以去暴力枚举顺序,也就是全排列。 

\(W_s\) 表示排列为 \(s\) 时的间距。又令 \(f_i\) 为前 \(i\) 只的最优决策,即最短距离,然后直接状态转移。

核心代码

do{
        f[0]=0;
        FOR(i,2,n)
        {
            int now=1<<(p[i]-1);
            f[i]=0;
            for(int j=i-1;j;j--)
            {
                now|=1<<(p[j]-1);
                f[i]=max(f[i],f[j]+w[now]);//这里是状态转移方程
            }
        }
        ans=min(ans,f[n]);
    }while(next_permutation(p+1,p+n+1));

总代码

#include<bits/stdc++.h>
using namespace std;
int n,m;
int p[10];
const int N=1e5+5;
int f[N];
int w[N];
int a[N];
int v[N];
int l[N];
#define inf 0x3f3f3f3f
int ans=inf;
#define FOR(i,_l,_r) for(int i=_l;i<=_r;i++)
int main()
{
    cin>>n>>m;
    FOR(i,1,n) cin>>a[i];
    FOR(i,1,m) cin>>l[i]>>v[i];
    FOR(i,1,n)
        FOR(j,i,m)
        {
            if(a[i]>v[j])
            {
                puts("-1");
                return 0;
            }
        }
    FOR(S,1,(1<<n)-1)
    {
        int len=0;
        FOR(i,1,n) if((S>>(i-1))&1) len+=a[i];
        FOR(i,1,m) if(len>v[i]) w[S]=max(w[S],l[i]);
    }
    FOR(i,1,n) p[i]=i;
    do{
        f[0]=0;
        FOR(i,2,n)
        {
            int now=1<<(p[i]-1);
            f[i]=0;
            for(int j=i-1;j;j--)
            {
                now|=1<<(p[j]-1);
                f[i]=max(f[i],f[j]+w[now]);//这里是状态转移方程
            }
        }
        ans=min(ans,f[n]);
    }while(next_permutation(p+1,p+n+1));
    cout<<ans;
    return 0;   
}

标签:ARC105C,do,Bridge,int,题解,Camels
From: https://www.cnblogs.com/yingxilin/p/18544582

相关文章

  • [题解]P3119 [USACO15JAN] Grass Cownoisseur G
    P3119[USACO15JAN]GrassCownoisseurG显然我们可以先跑强连通分量,由\(x\)个点缩成的新点\(u\)权值为\(v[u]=x\)。下文中的节点\(1\)均表示缩点后节点\(1\)所在的节点。我们在缩点后的DAG上跑拓扑排序,预处理出\(fa[i]\)和\(fb[i]\),分别表示“\(1\)到\(i\)路径的点权和”,“\(i......
  • 洛谷P11228的C++题解
    题目分析题目题目让我们算出机器人走步后经过了多少个不重复的点这道题不是搜索!直接按照题意模拟就行了。遇到墙就向右转,不是就直行。特别注意:向右转也是一步!一个格子最多算一遍!我们可以用一个标记数组 st,走过的点就打上标记。判断走道的点有没有打上标记,有就不......
  • P2779 [AHOI2016初中组] 黑白序列题解
    题意:小可可准备了一个未完成的黑白序列,用B和W表示黑色和白色,用?表示尚未确定。他希望知道一共有多少种不同的方法,在决定了每一个?位置的颜色后可以得到一个小雪喜欢的黑白序列。其中,小雪喜欢的黑白序列指的是对于任何正整数\(n\),由连续\(n\)个黑接上连续\(n\)个白......
  • 题解:CF2025E Card Game
    在这貌似和大部分做法不太一样(?)权当卡特兰数的复习题吧。不会卡特兰数的可以先看文末。如果没有花色\(1\)这道题就很简单了,对于每个别的花色都有\(C(m)\)种分配方案。\(C(n)\)表示卡特兰数的第\(n\)项,答案就是乘起来。发现除了花色\(1\)每种花色的牌都是独立的。这......
  • P6628 [省选联考 2020 B 卷] 丁香之路 题解
    P6628[省选联考2020B卷]丁香之路题解首先考虑题目中路径权值的含义:\(i,j\)两点之间的最短路就是\(|i-j|\)直接连边。题目要求从\(s\)遍历到每个点,到终点每个\(x\)的最短时间。于是我们不妨枚举每个\(x\),考虑在\(O(n)\)至\(O(n\logn)\)的时间复杂度里解决问题......
  • 《统计每个月兔子的总数》 递归、记忆化数组、动态规划题解
    目录题目描述输入描述输出描述解析完整代码描述有一对兔子,从出生后第3个月起每个月都生一对兔子,一对小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月(n<=50)的兔子总数为多少对?输入描述输入1个整数n,表示第几个月输出描述第n个月兔子的总数量有多少?......
  • P10833 [COTS 2023] 下 Niz题解
    题意:给定长度为\(N\)的序列\(a\),求满足以下条件的\((l,r)\)对数:\(1\lel\ler\leN\);\(a_l,a_{l+1},\cdots,a_{r-1},a_r\)是\(1\simr-l+1\)的排列。\(1\leN\le10^6\);\(1\lea_i\leN\)。思路首先,“排列”本身这个性质是很强的。因为排列本身需要从1开......
  • AT_agc011_d [AGC011D] Half Reflector 题解
    用\(1\)表示A,\(0\)表示B,观察进行一次操作后字符串会发生什么变化。首先当第一个数为\(1\)时,只会将第一个数变为\(0\)。对于剩下的情况,手玩一下可以发现会将第一个数移到末尾,然后将所有数异或\(1\)。先考虑暴力怎么做,可以记一个指针\(i\)和当前应该给全体数异或的值\(......
  • P10856 【MX-X2-T5】「Cfz Round 4」Xor-Forces题解
    题意:给定一个长度为\(n=2^k\)的数组\(a\),下标从\(0\)开始,维护\(m\)次操作:给定\(x\),设数列\(a'\)满足\(a'_i=a_{i\oplusx}\),将\(a\)修改为\(a'\)。其中\(\oplus\)表示按位异或运算。给定\(l,r\),查询\(a\)的下标在\(l,r\)之间的子数组有多少颜色段。不保......
  • [题解]P3225 [HNOI2012] 矿场搭建
    P3225[HNOI2012]矿场搭建挖煤点坍塌相当于把该点和与其相连的边在图上删掉。借用wjyyy的题解,我们定义“叶子连通块”为“只包含\(1\)个割点的点双连通分量”,“非叶子连通块”为“包含\(\ge2\)个割点的点双连通分量”。如下图,橙色点是割点,红色框圈出的是点双,加粗的是叶子连通......