F. Zero Remainder Sum || dp

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 73; int a[maxn][maxn], dp[maxn][maxn][maxn][maxn], d[maxn][maxn]; int main()
{
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
scanf("%d", &a[i][j]);
memset(dp, -1, sizeof(dp));
memset(d, -1, sizeof(d));
for(int i = 1; i <= n; ++i) dp[i][0][0][0] = 0;
for(int i = 1; i <= n; ++i)//第i行
{
for(int j = 0; j < m; ++j)//考虑到第j+1个数是否取
{
for(int k1 = 0; k1 <= m/2; ++k1)//取k1个数
{
for(int k2 = 0; k2 < k; ++k2)//sum%k等于k2
{
if(dp[i][j][k1][k2] == -1) continue;
dp[i][j+1][k1][k2] = max(dp[i][j][k1][k2], dp[i][j+1][k1][k2]);
dp[i][j+1][k1+1][(k2+a[i][j+1])%k] = max(dp[i][j][k1][k2] + a[i][j+1], dp[i][j+1][k1+1][(k2+a[i][j+1])%k]);
}
}
}
}
d[0][0] = 0;
dp[0][m][0][0] = 0;
for(int i = 0; i < n; ++i)//前i行
{
for(int j = 0; j < k; j++)//sum%k等于j
{
for(int k1 = 0; k1 <= m / 2; k1++)
{
for(int k2 = 0; k2 < k; k2++)
{
if(d[i][j] == -1) continue;
if(dp[i+1][m][k1][k2] == -1) continue;
d[i+1][(j+k2)%k] = max(d[i][j] + dp[i+1][m][k1][k2], d[i+1][(j+k2)%k]);
}
}
}
}
printf("%d\n", d[n][0]);
return 0;
}
G. Reducing Delivery Cost || 图论最短路
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 1005;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f; struct edge
{
int to, cost;
edge(int k1, int k2): to{k1}, cost{k2} {}
};
int d[maxn], road[maxn][2], dist[maxn][maxn], route[maxn][2];
vector<edge> G[maxn];
priority_queue< P, vector<P>, greater<P> > que; //第一维记录cost,第二维记录to void Dijkstra(int s)
{
memset(d, INF, sizeof(d));
d[s] = 0;
que.push(P(0, s)); while(!que.empty())
{
P p = que.top(); que.pop();
int v = p.second;
if(d[v] < p.first) continue; //去掉已经被访问过的节点和被更新过的边长
for(unsigned int i = 0; i < G[v].size(); i++) //更新边长
{
edge e = G[v][i];
if(d[e.to] > d[v] + e.cost)
{
d[e.to] = d[v] + e.cost;
que.push(P(d[e.to], e.to));
}
}
}
} int main()
{
int n, m, k, sum = 0;
scanf("%d %d %d", &n, &m, &k);
for(int i = 1; i <= m; ++i)
{
int u, v, w;
scanf("%d %d %d", &u, &v, &w);
G[u].push_back(edge(v, w));
G[v].push_back(edge(u, w));
road[i][0] = u, road[i][1] = v;
}
for(int i = 1; i <= n; ++i)
{
Dijkstra(i);
for(int j = 1; j <= n; ++j) dist[i][j] = d[j];
}
int ans = 0;
for(int i = 1; i <= k; ++i)
{
scanf("%d %d", &route[i][0], &route[i][1]);
ans += dist[route[i][0]][route[i][1]];
}
int r = 0;
for(int i = 1; i <= m; ++i)
{
sum = 0;
for(int j = 1; j <= k; ++j)
{
int tmp = min(dist[route[j][0]][road[i][0]] + dist[route[j][1]][road[i][1]], dist[route[j][0]][road[i][1]] + dist[route[j][1]][road[i][0]]);
sum += max(dist[route[j][0]][route[j][1]] - tmp, 0);
}
r = max(r, sum);
}
printf("%d\n", ans - r);
return 0;
}

Codeforces Round #677 (Div. 3)的更多相关文章

  1. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  2. Codeforces Round #677 (Div. 3)【ABCDE】

    比赛链接:https://codeforces.com/contest/1433 A. Boring Apartments 题解 模拟即可. 代码 #include <bits/stdc++.h ...

  3. Codeforces Round #677 (Div. 3) D/1433D Districts Connection

    https://codeforces.com/contest/1433/problem/D 找两个不同权值的节点A.B连起来,所有与A不同权值的连到A上,相同的连到B上. #include<io ...

  4. Codeforces Round #677 (Div. 3) E、G题解

    E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...

  5. Codeforces Round #677 (Div. 3) G. Reducing Delivery Cost(dijkstra算法)

    题目链接:https://codeforces.com/contest/1433/problem/G 题解 跑 \(n\) 遍 \(dijkstra\) 得到任意两点间的距离,然后枚举哪一条边权为 \ ...

  6. Codeforces Round #677 (Div. 3) D. Districts Connection思维1200

    题目链接 Problem - 1433D - Codeforces 题目 美好的一天,从看不懂题目开始~~ Example input 4 5 1 2 2 1 3 3 1 1 1 4 1 1000 1 ...

  7. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  8. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  9. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

随机推荐

  1. Pycharm快捷键与基本使用方法

    pycharm常用快捷键设置 关注公众号"轻松学编程"了解更多. 可在file->settings->keymap中查找关键字然后修改快捷键 1.多行编辑 ALT+鼠标 ...

  2. 6 MyISAM和InnoDB

    6 MyISAM和InnoDB MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好.甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直 ...

  3. 0 quickstart

    说明 使用的安装包有: Prism 6.3 Unity 4.0.1 基于Prism框架的应用程序都包含一个主项目和若干功能模块,主项目负责启动时初始化工作,包括依赖注入容器,定义Shell等等.功能模 ...

  4. 十个Pycharm快捷键——提升效率

    一些比较实用的Pycharm的快捷键,提升编写开发效率. 1.解除语法限制 默认情况下,Pycharm会对代码进行检查,包括但不仅限于代码是否有语法错误,是否符合PEP8规范. 如命名检查,如下图 变 ...

  5. Spider_基础总结1_Request(get/post__url传参_headers_timeout)+Reponse

    网络爬虫(一) 一.简介 1.robot协议(爬虫协议):这个协议告诉引擎哪些页面可以抓取,哪些不可以 -User-agent:爬虫引擎 -allow:允许robot访问的URL -disallow: ...

  6. 设置Eclipse 字体 - MD终于摸到了

    以前总是没办法设置Eclipse的 左边 资源管理器 字体.思想老局限在Eclipse的Font Setting里,跳不出这个玄妙的莫比乌斯环似的圈圈儿......每次戴着眼镜设置完字体,然后坐在电脑 ...

  7. HiveMQ TDengine extension 使用指南

    我们简单介绍一下 HiveMQ extension for TDengine 的部署和使用方法. TDengine 和 HiveMQ 部署方法 TDengine 安装最新 TDengine serve ...

  8. 转 Cache一致性和内存模型

    卢本伟牛逼,写得很好 https://wudaijun.com/2019/04/cpu-cache-and-memory-model/ 本文主要谈谈CPU Cache的设计,内存屏障的原理和用法,最后 ...

  9. 漏洞利用-FTP漏洞利用

    一.环境说明 目标IP: 本人虚拟机 192.168.80.134 ,使用 metasploit2 攻击IP: 本人虚拟机 192.168.80.129 ,使用 kali 二.匿名用户登录 root@ ...

  10. Linux学习 - 02 使用 - Centos8 - 网络配置相关

    『Centos8 网络配置』 题外话:最近太忙,利用仅有的周末空闲时间记录点东西,草率了. 问题1:安装 Centos8.2 minimal 过程中,只是设置了 WiFi的静态IP,没有进行[以太网] ...