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的更多相关文章

  1. 每天一套题打卡|河南省第十届ACM/ICPC

    A.谍报分析 题意:请你编程,快速统计出频率高的前十个单词. 思路:字符串输入,map哈希表map<string,int >记录每个单词出现的次数,pair重载优先级 #include&l ...

  2. 每天一套题打卡|河南省第十一届ACM/ICPC

    A 计划日 题意:已知李明在YYYY年MM月DD日星期W订了学习计划,现在想看看李明N天后的完成情况和个人总结,你能告诉我那天的日期和星期几吗? 模拟日期计算: 计算星期可以用基姆拉尔森公式 //中国 ...

  3. 每天一套题打卡|河南省第八届ACM/ICPC

    A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...

  4. 每天一套题打卡|河南省第九届ACM/ICPC

    A 表达式求值 表达式求值:可以用递归求解,也可以用栈模拟,考过多次. 类似题目:NYOJ305,NYOJ35 用栈模拟做法: #include <stdio.h> #include &l ...

  5. 2014年河南省第七届ACM大赛总结

    虽然大赛已经结束了两天,不过比赛的场景还是不断地在眼前回放,一遍遍,这次的比赛给了我很深刻的感悟还有教训. 刚开始比赛选择了贩卖武器那道题,也是全场到最后唯一没有被人做出来的一道题,策略的严重错误,大 ...

  6. 河南省第七届ACM程序设计大赛总结

    省赛总结 首先说说比赛时的情况吧,刚开始的时候我的任务就是翻译英文题目,找出比较水的题目,他们两个直接找中文水题切,其实每次比赛我们都是这样配合的,由于他们的判题系统一开始存在问题,交的正确的代码给判 ...

  7. 河南省第七届ACM程序设计大赛赛后总结

    我们学校ACM集训开始于4月5号(清明节),5月25日在郑州解放军信息工程大学举办,集训耗时50天,但是感觉效果还行,但是也不是太好:我们也已经尽力了,虽然说只拿了个银牌,每份收获的背后,都会有辛勤的 ...

  8. 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 ...

  9. poj 3666 河南省第七届程序设计D题(山区修路)

    题目大意: 给定一个序列,以最小代价将其变成单调不增或单调不减序列,求最小的变动价值:需要用到离散化dp 状态转移方程: dp[i][j]=abs(j-w[i])+min(dp[i-1][k]);(k ...

随机推荐

  1. LG3119 「USACO2015JAN」Grass Cownoisseur

    问题描述 LG3119 题解 显然,如果有个环,一定是全部走完的. 所以缩点,缩出一个 \(\mathrm{DAG}\) . 只能走一次反向,于是在正图和反图上各跑一次,枚举边,取 \(\mathrm ...

  2. ini_set()

    ini_set ( string $varname , string $newvalue ) : string 设置指定配置选项的值.这个选项会在脚本运行时保持新的值,并在脚本结束时恢复. 参数 va ...

  3. 《计算机网络第7版》PDF+《计算机网络释疑与习题解答第7版》PDF

    谢希仁 链接:https://pan.baidu.com/s/1_sM9bFL0y3S1NXBz5rLyvg 提取码:po3i 计算机网络(第7版)谢希仁 · 语雀 https://www.yuque ...

  4. python进阶之命名空间与作用域

    命名空间 Namespace Namespace命名空间,命名空间是一个字典(dictionary),它的键就是变量名,它的值就是那些变量的值.命名空间的一大作用是避免名字冲突. python使用命名 ...

  5. Note | 期刊答复(response)

    第一次TPAMI回复整理的经验. 190926:TPAMI中了,特回来补充. 简洁 尤其对于问答型问题,一定要在前三句话就回答审稿人的问题:yes or no. 不要绕弯子,专注于审稿人问题,解决就行 ...

  6. Jenkins安装第一个插件和通过离线安装包进行安装

    1.打开左侧Manage Jenkins 选择Manage Plugins菜单 2.搜索Folders插件,该插件用于创建一个目录 3.点击安装进入插件安装状态,Jenkins会自动下载相关联的插件 ...

  7. java.sql.SQLException: Could not establish connection to 192.168.8.111:10000/default: java.net.ConnectException: Connection refused: connect at org.apache.hadoop.hive.jdbc.HiveConnection.<init>(HiveC

    java.sql.SQLException: Could not establish connection to 192.168.8.111:10000/default: java.net.Conne ...

  8. Visual Studio 2019 (VS2019)正式版安装 VisualSVN Server 插件

    VS2019 正式版最近刚刚推出来,目前 Ankhsvn 还不支持,它最高只支持 VS2017,全网搜索了一下,也没有找到.在 Stackoverflow 上看了一下,找到这篇问答: 自己按照这种方法 ...

  9. 阿里OSS 渗透案例

    采用JavaScript客户端直接签名时,AccessKeyID和AcessKeySecret会暴露在前端页面,因此存在严重的安全隐患. 渗透案例 阿里云Access Token问题 - 项目收获记录 ...

  10. Java 函数式编程—@FunctionalInterface----functional interface

    单一函数接口,可以使用拉姆达表达式的形式具体化和实例化. 本质是将接口函数签名化. 如定义了一个函数式接口如下: @FunctionalInterface interface GreetingServ ...