每天一套题打卡|河南省第七届ACM/ICPC
A 海岛争霸
题目:Q次询问,他想知道从岛屿A 到岛屿B 有没有行驶航线,若有的话,所经过的航线,危险程度最小可能是多少。
多源点最短路,用floyd
在松弛更新:g[i][k] < g[i][j] && g[k][j] < g[i][j]时,g[i][j] = max(g[i][k],g[k][j]);
#include<bits/stdc++.h>
using namespace std;
const int maxn = 510;
int n,m;
int q;
int g[maxn][maxn];
const int inf = 0x3f3f3f3f;
// 初始化 g 矩阵
void init() {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (i == j) {
g[i][j] = 0;
} else {
g[i][j] = inf;
}
}
}
}
// 插入一条带权有向边
void insert(int u, int v, int w) {
g[u][v] = w;
}
// 核心代码
void floyd() {
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
//这里是本题的核心 松弛更新
if(g[i][k] < g[i][j] && g[k][j] < g[i][j]){
g[i][j] = max(g[i][k],g[k][j]);
}
}
}
}
}
int main(){
cin>>n>>m;
init();
for(int i=1;i<=m;i++){
int a,b,v;
cin>>a>>b>>v;
if(v < g[a][b]){
insert(a,b,v);
insert(b,a,v);
}
}
floyd();
cin>>q;
while(q--){
int a,b;
cin>>a>>b;
if(g[a][b] == inf){
cout<<-1<<endl;
}else{
cout<<g[a][b]<<endl;
}
}
return 0;
}
*B 物资调度
1.dfs剪枝都能过。。
2.dp当然也可以,0-1背包
3.二进制枚举wa了
#include<bits/stdc++.h>
using namespace std;
//AC
const int maxn = 110;
int t;
int n,m;
int a[maxn];
int vis[maxn];
int ans = 0;
//第k个数 当前值为sum
void dfs(int k,int sum){
if(sum > m) return;
if(k==n+1){
if(sum == m){
ans++;
}
return;
}
//每个数有两种选择:用这个数 和 不用这个数 都dfs搜索一遍
dfs(k+1,sum);//不用这个数
if(sum + a[k]<=m){
dfs(k+1,sum+a[k]);//用这个数 sum就需要加上当前这个数的值
}
}
int main(){
cin>>t;
while(t--){
ans = 0;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
memset(vis,0,sizeof(vis));
dfs(1,0);
cout<<ans<<endl;
}
return 0;
}
二进制枚举做法
#include<bits/stdc++.h>
using namespace std;
//WA
const int maxn = 110;
int t;
int n,m;
int a[maxn];
int main(){
cin>>t;
while(t--){
int ans = 0;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
//枚举0 ~ 1<<n种状态
for(int i=0; i<(1<<n); i++){
int sum = 0;
for(int j=1;j<=n;j++){
if(i & (1<<(j-1))){
sum += a[j];
}
}
if(sum == m){
// cout<<i<<endl;
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
*D 山区修路

我只能写个2次dp的 暴力解法,但是这里ai 有1e9这么大,wa。
再补题。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 510;
int t;
int n;
int dp[maxn][maxn][2];
int a[maxn];
const int inf = 0x3f3f3f3f;
int main(){
cin>>t;
while(t--){
cin>>n;
int maxh = 0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i] > maxh) maxh = a[i];
}
memset(dp,inf,sizeof(dp));
for(int i=0;i<=maxh;i++){
dp[1][i][0] = abs(a[1] - i);
dp[1][i][1] = abs(a[1] - i);
}
//从前推 低->高
for(int i=2;i<=n;i++){
for(int j=0;j<=maxh;j++){
for(int k=0;k<=j;k++){
dp[i][j][0] = min(dp[i][j][0],dp[i-1][k][0] + abs(a[i] - j));
}
}
}
//从前推 高->低
for(int i=2;i<=n;i++){
for(int j=0;j<=maxh;j++){
for(int k=j;k<=maxh;k++){
dp[i][j][1] = min(dp[i][j][1],dp[i-1][k][1] + abs(a[i] - j));
}
}
}
int ans = inf;
for(int i=0;i<=maxh;i++){
if(dp[n][i][1] < ans) ans = dp[n][i][1];
if(dp[n][i][0] < ans) ans = dp[n][i][0];
}
cout<<ans<<endl;
}
return 0;
}
F Turing equation
题意:看样例能猜到,the numbers being read backwards.
从后往前将字符串 转成三个数,判断和是否相等
#include<bits/stdc++.h>
using namespace std;
string s;
int main(){
while(cin>>s && !(s[0] == '0' && s[1] == '+' && s[2] == '0' && s[3] == '=' && s[4] == '0' )){
int len = s.length() - 1;
int c = 0;
int b = 0;
int a = 0;
int i = len;
while(i>=0 && s[i] == '0') i--;
while(i>=0 && s[i] >= '0' && s[i] <= '9'){
c = c*10 + (s[i]- '0');
i--;
if(s[i] == '=') break;
}
if(i>=0 && s[i] == '=') i--;
while(i>=0 && s[i] == '0') i--;
while(i>=0 && s[i] >= '0' && s[i] <= '9'){
b = b*10 + (s[i]- '0');
i--;
if(s[i] == '+') break;
}
if(i>=0 && s[i] == '+') i--;
while(i>=0 && s[i] == '0') i--;
while(i>=0 && s[i] >= '0' && s[i] <= '9'){
a = a*10 + (s[i]- '0');
i--;
}
if(a + b == c)
cout<<"TRUE"<<endl;
else
cout<<"FALSE"<<endl;
}
return 0;
}
H Rectangles
1.一眼递推
2.LIS的dp
题目英文,细节比较多
The list can be created from rectangles in any order and in either orientation. //长宽可以交换
A rectangle fits inside another rectangle if one of its sides is strictly smaller than the other rectangle's and the remaining side is no larger.//给了样例能懂
#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
int t,n;
int a[maxn];
struct node{
int x;
int y;
};
//ac
bool cmp(const node &p,const node &q){
if(p.x == q.x) return p.y < q.y;
return p.x < q.x;
}
int main(){
cin>>t;
while(t--){
cin>>n;
node g[n+5];
for(int i=1;i<=n;i++){
int xi,yi;
cin>>xi>>yi;
if(xi < yi) swap(xi,yi); //这里是注意点
g[i].x = xi;
g[i].y = yi;
a[i] = 1;
}
sort(g+1,g+n+1,cmp); //排序
int ans = 1;
//递推
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if((g[j].x > g[i].x && g[j].y > g[i].y) || (g[j].x > g[i].x && g[j].y == g[i].y) || (g[j].x == g[i].x && g[j].y > g[i].y) ){
a[j] = max(a[j],a[i]+1);
}
}
}
for(int i=1;i<=n;i++){
if(a[i] > ans) ans = a[i];
}
cout<<ans<<endl;
}
return 0;
}
下面LIS最长上升子序列的写法,也AC的
#include<bits/stdc++.h>
using namespace std;
//ac
/*
A rectangle fits inside another rectangle if one of its sides is strictly smaller than the other rectangle's
and the remaining side is no larger.
If two rectangles are identical they are considered not to fit into each other.
For example, a 2*1 rectangle fits in a 2*2 rectangle, but not in another 2*1 rectangle.
容易看懂题意
*/
//The list can be created from rectangles in any order and in either orientation.
//意思是长宽可以交换 想法:那么我们在输入数据的时候把小的给长 大的给宽就可以了
const int maxn = 110;
int t,n;
int a[maxn];
struct node{
int x;
int y;
};
bool cmp(const node &p,const node &q){
if(p.x == q.x) return p.y < q.y;
return p.x < q.x;
}
int main(){
cin>>t;
while(t--){
cin>>n;
node g[n+5];
for(int i=1;i<=n;i++){
int xi,yi;
cin>>xi>>yi;
if(xi < yi) swap(xi,yi);
g[i].x = xi;
g[i].y = yi;
a[i] = 1;
}
sort(g+1,g+n+1,cmp);
int ans = 0;
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if((g[j].x < g[i].x && g[j].y < g[i].y) || (g[j].x < g[i].x && g[j].y == g[i].y) || (g[j].x == g[i].x && g[j].y < g[i].y) ){
a[i] = max(a[i],a[j]+1);
}
}
}
for(int i=1;i<=n;i++){
if(a[i] > ans) ans = a[i];
}
cout<<ans<<endl;
}
return 0;
}
每天一套题打卡|河南省第七届ACM/ICPC的更多相关文章
- 每天一套题打卡|河南省第十届ACM/ICPC
A.谍报分析 题意:请你编程,快速统计出频率高的前十个单词. 思路:字符串输入,map哈希表map<string,int >记录每个单词出现的次数,pair重载优先级 #include&l ...
- 每天一套题打卡|河南省第十一届ACM/ICPC
A 计划日 题意:已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 模拟日期计算: 计算星期可以用基姆拉尔森公式 //中国 ...
- 每天一套题打卡|河南省第八届ACM/ICPC
A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...
- 每天一套题打卡|河南省第九届ACM/ICPC
A 表达式求值 表达式求值:可以用递归求解,也可以用栈模拟,考过多次. 类似题目:NYOJ305,NYOJ35 用栈模拟做法: #include <stdio.h> #include &l ...
- 2014年河南省第七届ACM大赛总结
虽然大赛已经结束了两天,不过比赛的场景还是不断地在眼前回放,一遍遍,这次的比赛给了我很深刻的感悟还有教训. 刚开始比赛选择了贩卖武器那道题,也是全场到最后唯一没有被人做出来的一道题,策略的严重错误,大 ...
- 河南省第七届ACM程序设计大赛总结
省赛总结 首先说说比赛时的情况吧,刚开始的时候我的任务就是翻译英文题目,找出比较水的题目,他们两个直接找中文水题切,其实每次比赛我们都是这样配合的,由于他们的判题系统一开始存在问题,交的正确的代码给判 ...
- 河南省第七届ACM程序设计大赛赛后总结
我们学校ACM集训开始于4月5号(清明节),5月25日在郑州解放军信息工程大学举办,集训耗时50天,但是感觉效果还行,但是也不是太好:我们也已经尽力了,虽然说只拿了个银牌,每份收获的背后,都会有辛勤的 ...
- ZZUOJ-1195-OS Job Scheduling(郑州大学第七届ACM大学生程序设计竞赛E题)
1195: OS Job Scheduling Time Limit: 2 Sec Memory Limit: 128 MB Submit: 106 Solved: 35 [id=1195&quo ...
- poj 3666 河南省第七届程序设计D题(山区修路)
题目大意: 给定一个序列,以最小代价将其变成单调不增或单调不减序列,求最小的变动价值:需要用到离散化dp 状态转移方程: dp[i][j]=abs(j-w[i])+min(dp[i-1][k]);(k ...
随机推荐
- 动态添加Redis密码认证的方法
1.定制jedis 对redis返回的错误的处理,做两处修改: 忽略 (error) ERR Client sent AUTH, but no password is set.使配置了密码的jedis ...
- Java基本数据类型转换二
public class TestConvert2 { /** * @param args */ public static void main(String[] args) { // TODO Au ...
- TransportFireWall
1.shadow for python install on windows (1.) install python pip (2.) install openssl for windows (3.) ...
- Deformable Convolutional Networks
1 空洞卷积 1.1 理解空洞卷积 在图像分割领域,图像输入到CNN(典型的网络比如FCN)中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预 ...
- MySQL实战45讲学习笔记:第三十二讲
一.本节分析案例 在 MySQL 中有两个 kill 命令:一个是 kill query + 线程 id,表示终止这个线程中正在执行的语句:一个是 kill connection + 线程 id,这里 ...
- 剑指offer:对称的二叉树(镜像,递归,非递归DFS栈+BFS队列)
1. 题目描述 /** 请实现一个函数,用来判断一颗二叉树是不是对称的. 注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的 */ 2. 递归 思路: /** 1.只要pRoot.left和 ...
- 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation
前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...
- 网Js RSA加密,后端(Asp.Net)解码(非对称加解密)
前言 RSA加解密知识自行百度了解决一下 1.取得公钥与私钥方法 JSEncrypt Download 下载后将其发布成网站进入:http://127.0.0.1:3000/demo/index.ht ...
- fastadmin表单提交后却没有关闭弹窗
点击操作按钮弹出窗口,操作完之后提交表单,无论操作成功还是失败,窗口都不关闭,操作之后出现一个笑脸,3秒后回到弹框刚打开的样子 而我们想要的是这个效果: 在jS那里给这个按钮绑定一个事件即可实现
- eclipse激活jrebel
1.原本jrebel已经激活了,某天突然失效了.报错如下: JRebel: ERROR Failed to obtain seat. Unable to connect to license serv ...