Codeforces Round #677 (Div. 3)
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;
}
#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)的更多相关文章
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #677 (Div. 3)【ABCDE】
比赛链接:https://codeforces.com/contest/1433 A. Boring Apartments 题解 模拟即可. 代码 #include <bits/stdc++.h ...
- Codeforces Round #677 (Div. 3) D/1433D Districts Connection
https://codeforces.com/contest/1433/problem/D 找两个不同权值的节点A.B连起来,所有与A不同权值的连到A上,相同的连到B上. #include<io ...
- Codeforces Round #677 (Div. 3) E、G题解
E. Two Round Dances #圆排列 题目链接 题意 \(n\)(保证偶数)个人,要表演一个节目,这个节目包含两种圆形舞蹈,而每种圆形舞蹈恰好需要\(n/2\)个人,每个人只能跳一种圆形舞 ...
- Codeforces Round #677 (Div. 3) G. Reducing Delivery Cost(dijkstra算法)
题目链接:https://codeforces.com/contest/1433/problem/G 题解 跑 \(n\) 遍 \(dijkstra\) 得到任意两点间的距离,然后枚举哪一条边权为 \ ...
- 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 ...
- 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 ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
随机推荐
- Java Web中解决乱码的方式
Java Web中解决乱码的方式 方式一:添加编码过滤器 package com.itmacy.dev.filter; import javax.servlet.*; import javax.ser ...
- 配置JSTL 解决错误:org.apache.jasper.JasperException
在IDEA中SSM项目开发中, 在TomCat部署ssm项目时,JSTL的错误 错误如下: 1 org.apache.jasper.JasperException: The absolute uri: ...
- 《Google软件测试之道》 第一章google软件测试介绍
前段时间比较迷茫,没有明确的学习方向和内容.不过有一点应该是可以肯定的:迷茫的时候就把空闲的时间用来看书吧! 这本书,目前只是比较粗略的看了一遍,感触很大.以下是个人所作的笔记,与原文会有出入的地方. ...
- bash中选择结构、循环结构与break、continue
if两种选择结构 if 测试条件; then 程序块 else 程序块 fi if 测试条件1; then 程序块 elif 测试条件2; then 程序块 ... elif 程序条件n; then ...
- Elasticsearch 注册windows服务后,服务启动失败,意外终止
直接双击elasticsearch.bat可以成功启动,注册成服务后就启动失败 从网上查找问题,发现是jdk版本的问题,用ES自带的jdk就可以启动成功. 默认ES会先找JAVA_HOME环境变量,如 ...
- Windows defender历史记录闪退解决方案
删除C:\ProgramData\Microsoft\Windows defender\Scans\History\Service文件夹 另外defender可以设置保护文件夹,选择病毒和威胁防护-管 ...
- 有了Cloud Alert电话报警,再也不怕遗漏告警了
Cloud Alert 的部分应用部署在阿里云上,使用了多方面的监控服务: 阿里自身的ECS服务器和网站. Zabbix 监控服务器应用程序. OneAPM 的应用级监控. 腾讯云拨测,做网站监控. ...
- 【webSocket】实现原理
服务端文件: import base64 import hashlib import socket # 将请求头格式化成字典 def get_headers(data): ""&q ...
- vue 使用中的小技巧 (一)
在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧 data 和 Object.freeze 每个Vue实 ...
- Dance Dance Revolution
今天我们来讲 Dance Dance Revolution这题 本题原网址 注意本题为多组输入输出,直到输入单个零而止(题面有点小问题) 很明显,此题为一道动态规划题(请不要妄想用贪心算法过这题,尽管 ...