AtCoder Regular Contest 105 C - Camels and Bridge
题目链接
题目描述
有n只骆驼过m桥,第i只骆驼负重wiw_iwi,第i座桥的长度为lil_ili,最大负重为viv_ivi,问骆驼队伍长度最短为多少可以通过所有的桥。
思路
n的数据范围很小,可以暴力解决。根据桥的长度从大到小预处理一下其能承受的重量。
dp[i]dp[i]dp[i]表示从第一只骆驼到第i只骆驼的最短距离。
dp[i]=max(dp[j]+len,dp[i])dp[i] = max(dp[j] + len, dp[i])dp[i]=max(dp[j]+len,dp[i]),len表示第j只骆驼到第i只骆驼的最短距离。寻找len的过程中就是在预处理的桥中二分一下第j只到第i只骆驼的重量所返回的最短桥的长度。
代码
#include<bits/stdc++.h>
using namespace std;typedef long long LL;
#define int LL
const int N = 1e5 + 10;int w[10];
bool vis[10];
int b[10], s[10], dp[10];
struct node {int l, v;friend bool operator < (node a, node b) {if(a.l == b.l) {return a.v < b.v;}return a.l < b.l;}
}a[N];
int n, m;
LL res;int find(int x) {int l = 1, r = m;int res = 0;while(l <= r) {int mid = l + r >> 1;if(x > a[mid].v) {res = a[mid].l;l = mid + 1;} else r = mid - 1;}return res;
}void work() {memset(dp, 0, sizeof dp);for(int i = 1; i <= n; i++) {s[i] = s[i - 1] + w[b[i]];}for(int i = 2; i <= n; i++) {for(int j = i - 1; j; j--) {int tmp = s[i] - s[j - 1];int len = find(tmp);dp[i] = max(dp[i], dp[j] + len);}}res = min(res, dp[n]);
}void dfs(int cnt) {if(cnt == n) {work();return;}for(int i = 1; i <= n; i++) {if(!vis[i]) {vis[i] = true;b[cnt + 1] = i;dfs(cnt + 1);vis[i] = false;}}
}void solve() {scanf("%lld%lld", &n, &m);for(int i = 1; i <= n; i++) {scanf("%lld", &w[i]);}for(int i = 1; i <= m; i++) {scanf("%lld%lld", &a[i].l, &a[i].v);}sort(a + 1, a + 1 + m);int mn = 1e9;for(int i = m; i >= 1; i--) {mn = min(mn, a[i].v);a[i].v = mn;}for(int i = 1; i <= n; i++) {if(mn < w[i]) {puts("-1");return;}}res = 2e18;dfs(0);printf("%lld\n", res);
}signed main() {// freopen("in.txt", "r", stdin);
// int t; scanf("%d", &t); while(t--)solve();
}
AtCoder Regular Contest 105 C - Camels and Bridge相关推荐
- AtCoder Regular Contest 105 部分 NIM游戏
TESyyds,本来以为又要3:1,结果创造历史!!!非常激动啊好久好久没看过让二追三了. 无缝衔接回旋踢,qa插眼we.送给雷达哥 A - Fourtune Cookies 签到题 #define ...
- AtCoder Regular Contest 065
AtCoder Regular Contest 065 C - Daydream Score : 300300300 points 倒着来就行了,正着来会产生歧义匹配,dreamer,dreamdre ...
- AtCoder Regular Contest 100 D - Equal Cut 思维 + 前缀和
传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,你要将其分成四份,让这四份中和的最大值−-−最小值最小,输出这个最小值. n≤2e5,ai≤1e9n\le2e5,a_i\le1e9n≤2 ...
- AtCoder Regular Contest 100 E - Or Plus Max Sos dp
传送门 文章目录 题意: 思路: 题意: 给你一个长度为2n2^n2n的数组,让你对于所有的1≤k≤2n−11\le k\le 2^n-11≤k≤2n−1求最大的ai+aj,0≤i<j≤2n−1 ...
- AtCoder Regular Contest 061 E - Snuke‘s Subway Trip(建图 + dijkstra最短路 / 0/1bfs / 并查集)
AtCoder Regular Contest 061 E - Snuke's Subway Trip problem 洛谷翻译 my idea 最近一直在做网络流,所以一读这题后,我就想到了最小费用 ...
- NOMURA Programming Contest 2021(AtCoder Regular Contest 121)
文章目录 A - 2nd Greatest Distance B - RGB Matching C - Odd Even Sort D - 1 or 2 E - Directed Tree F - L ...
- AtCoder题解——AtCoder Regular Contest 107——B - Quadruple
题目相关 题目链接 AtCoder Regular Contest 107 B 题,https://atcoder.jp/contests/arc107/tasks/arc107_b. Problem ...
- AtCoder Regular Contest 071 D - 井井井 / ###
题目:http://arc071.contest.atcoder.jp/tasks/arc071_b 题意: 有一个二维的平面,给你xn根竖线和ym根横线,问这些线围成的长方形(正方形)的面积和(要求 ...
- AtCoder Regular Contest 062 E - AtCoDeerくんと立方体づくり / Building Cubes with AtCoDeer
题目传送门:https://arc062.contest.atcoder.jp/tasks/arc062_c 题目大意: 给你\(N\)块正方形木板,每块木板四角有四种颜色(可以相同),木板中央有编号 ...
最新文章
- 如何用Python快速抓取Google搜索?
- Nginx教程--02.Nginx虚拟主机的配置
- ###STL学习--标准模板库
- meta viewport相关
- WebSocket的初步认识
- 网站程序安全分析器 VB源码
- 洛谷 P1048 采药 01背包入门
- ajax传递timestamp,解决ajax请求自动增加时间戳问题
- 南大网院计算机基础第一次作业,南大网院2015计算机基础第一次作业.docx
- ARP欺骗的艺术 | 断网与监听
- 2022年认证杯SPSSPRO杯数学建模A题(第二阶段)人员的紧急疏散求解全过程文档及程序
- python 风玫瑰图_【求助】风玫瑰图
- 遇到过什么印象深刻的bug?
- svn基础学习之常用知识
- Mysql全站最全笔记,从入门到资深!
- 电信行业大数据应用的四个方向
- android在google map上画出导航路线图
- .net core 处理base64图片
- Fiddler抓包Android手机https、http教程
- android xml图片缩放,Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码...