比赛结果如何呢?充满感慨~ 参加这个比赛,发现确实要成功accept有点难度,算是见识到了,还是ACM大佬厉害。
小白直接上题目了。
Drink
Problem Description
我们有 n 种不同的饮料,每种饮料有无限多瓶,第 i 种饮料一瓶提供 x[i] 毫升的水分,包含 y[i] 卡路里。

现在我们需要选择一种饮料一直喝,直到补充了至少 mm 毫升的水分,我们想使得摄入的卡路里总和最小。请求出这个最小值。
一旦打开一瓶饮料,就一定要喝完。

Input
第一行一个整数 test(1≤test≤100) 表示数据组数。 对于每组数据,第一行两个整数 n,m(1≤n≤100,1≤m≤10000)。 接下来 nn 行,每行两个整数x[i],y[i] (1≤x[i],y[i]≤100)。

Output
对于每组数据,一行一个整数表示答案。

Sample Input
2
1 10
3 3
2 10
3 3
2 1
Sample Output
12
5

一看到题目,感觉跟0-1背包问题很类似,所以我尝试了动态规划的方法,结果本地测试没问题,提交竟然wrong answer。调试好一会,用了直接的思路解决问题。
Accept代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{int m;  cin>>m;while(m--){int n, c, num=100000;cin>>n>>c;for(int i = 1; i <= n; i++){int x, y; cin>>x>>y;if(c%x==0)num = min(num,c/x*y);else num = min(num,(c/x+1)*y);}cout<<num<<"\n";}return 0;
}

目前官方提示:对于每一种饮料,都可以算出最少需要多少瓶,从而知道最少摄入多少卡路里,从中找个最优值。
回头看当时的做法,思路差不多一样,直接明了。

GPA
Problem Description
小沃沃一共参加了 4 门考试,每门考试满分 100 分,最低 0 分,分数是整数。

给定四门考试的总分,请问在最优情况下,四门课绩点的和最高是多少?

分数与绩点之间的对应关系如下:

95~100 4.3
90~94 4.0
85~89 3.7
80~84 3.3
75~79 3.0
70~74 2.7
67~69 2.3
65~66 2.0
62~64 1.7
60~61 1.0
0~59 0

Input
第一行一个正整数 test(1 \le test \le 401)test(1≤test≤401) 表示数据组数。 接下来 testtest行,每行一个正整数 xx 表示四门考试的总分 (0≤x≤400)。

Output
对于每组数据,一行一个数表示答案。答案保留一位小数。

Sample Input
2
0
400
Sample Output
0.0
17.2

Accept代码:

#include<bits/stdc++.h>
using namespace std;
double maxnum;
const int N=11;
int low_g[N]={95,90,85,80,75,70,67,65,62,60,0};//每档次绩点对应最低分
double scores[N]={4.3,4.0,3.7,3.3,3.0,2.7,2.3,2.0,1.7,1.0,0};//绩点
double score_to_grade(double score)//根据分数得出相应绩点
{if(score>=95)return scores[0];else if(score>=90)return scores[1];else if(score>=85)return scores[2];else if(score>=80)return scores[3];else if(score>=75)return scores[4];else if(score>=70)return scores[5];else if(score>=67)return scores[6];else if(score>=65)return scores[7];else if(score>=62)return scores[8];else if(score>=60)return scores[9];elsereturn scores[10];
}
void dfs(int i,int sum,double score)//深度搜索
{if(sum<0)return;if(i==3)//最多4门课{maxnum=max(maxnum,score_to_grade(sum)+score);//取最大绩点和 return ;}for(int j=0;j<N;j++)//循环,枚举每门课的分数档次能够获得的绩点 dfs(i+1,sum-low_g[j],score+scores[j]);//深度搜优先索
}
int main()
{int r,total;cin>>r;while(r--){cin>>total;maxnum=0;dfs(0,total,0);cout<<setiosflags(ios::fixed)<<setprecision(1);//保留一位小数 cout<<maxnum<<'\n';}return 0;
}

目前官方提示:暴力做法:枚举四门课的成绩,按规则算算GPA。 优秀做法:对于每一档绩点,分数取最低一定是最优的,那么我们就可以用枚举分数的档次取代枚举具体的分数。
这个思路觉得不是暴力做法,对给定的总成绩,深度优先搜索,枚举出每门课的分数档次能够获得的绩点,进行递归,最后取最大绩点和。

Dec

Problem Description
初始有 a, b两个正整数,每次可以从中选一个大于 1 的数减 1,最后两个都会减到 1,我们想知道在过程中两个数互质的次数最多是多少。
Input
第一行一个正整数test(1≤test≤1000000) 表示数据组数。
接下来 test 行,每行两个正整数 a,b(1≤a,b≤1000)。
Output
对于每组数据,一行一个整数表示答案。

Sample Input
1
2 3
Sample Output
4样例解释
2 3 -> 1 3 -> 1 2 -> 1 1

Accept代码:

#include<iostream>
using namespace std;const int n_max=1005;
int test;
int a,b;int f[n_max+1][n_max+1];
int gcd(int a,int b)//辗转相除求最小公约数
{int temp=a;while(a%b){a=b;b=temp%b;temp=a;}return b;
}
void dp()
{for(int i=1;i<=n_max;i++)//动态规划 {for(int j=1;j<=n_max;j++){int t=0;if (gcd(i,j)==1)//如果最大公约数是1则互质t=1;f[i][j]=max(f[i-1][j]+t,f[i][j-1]+t);//取最大值 }}
}
int main()
{cin>>test;dp();for(int k=0; k<test; k++){scanf("%d%d",&a,&b); //输入用cin/cout都会超时printf("%d\n",f[a][b]);}}

官方提示:用 f[i][j]f[i][j] 表示第一个数字从 ii 开始减,第二个数字从 jj 开始减的情况下最多有多少对互质的数字,f[i][j]f[i][j] 从 f[i-1][j]f[i−1][j] 或 f[i][j-1]f[i][j−1] 转移过来。
很明显,使用动态规划的方法解决直观明了,开始看题目以为是要数学推导,找规律。

2020年百度之星程序设计大赛-初赛一(Drink、GPA、Dec)相关推荐

  1. 2020 年百度之星·程序设计大赛 - 初赛一 Drink

    Problem Description 我们有 nn 种不同的饮料,每种饮料有无限多瓶,第 ii 种饮料一瓶提供 x[i]x[i] 毫升的水分,包含 y[i]y[i] 卡路里. 现在我们需要选择一种饮 ...

  2. 2020年百度之星·程序设计大赛-初赛一

    Pro.ID 1001 Drink 题解 1002 GPA 题解 1003 Dec 题解 1004 Civilization 1005 Rotate 题解 1006 Matrix 1007 Mosqu ...

  3. 2020 年百度之星·程序设计大赛 - 初赛一 Civilization BFS广搜

    problem Civilization Accepts: 619 Submissions: 2182 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  4. 2020 年百度之星·程序设计大赛 - 初赛一 Dec 二维DP,预处理

    problem Dec Accepts: 1284 Submissions: 4572 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327 ...

  5. 2020 年百度之星·程序设计大赛 - 初赛一 GPA DFS深搜

    problem GPA Accepts: 1554 Submissions: 3947 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327 ...

  6. 2020 年百度之星程序设计大赛 - 初赛二

    Poker Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

  7. 2020 年百度之星·程序设计大赛 - 初赛一题解

    Drink 对于每一种饮料,都可以算出最少需要多少瓶,从而知道最少摄入多少卡路里,从中找个最优值. #include <iostream> #include <cstdio>u ...

  8. 1001. Poker (思维 / 模拟)(2020年百度之星*程序设计大赛-初赛二)

    传送门 思路: 嗐,又是这种模拟题,每次都不长记性看数据范围,非得傻傻的去循环模拟T一次才知道思考.呜呜呜太菜了. 既然每次至少拿出m,且求的是最多次数,那我们每次就拿m出来. 先将m * p%上取整 ...

  9. 2020年百度之星·程序设计大赛 - 初赛一(前三题)

    文章目录 Drink[贪心] 题目描述 测试样例 解题思路 赛时AC代码 赛后优化AC代码 总结: GPA[枚举] 题目描述 测试样例 解题思路 赛时WA代码 赛时AC代码 总结: Dec[反向dp+ ...

  10. 2020 年百度之星·程序设计大赛 - 初赛三-Discount

    Discount Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

最新文章

  1. GitLab CI流水线配置文件.gitlab-ci.yml详解(三)
  2. Redis 数据结构 :SDS、链表、字典、跳表、整数集合、压缩列表
  3. 算法导论 思考题9-2
  4. 【有内鬼,终止交易】风靡朋友圈的壁纸,实现代码竟如此简单 | 原力计划
  5. python如何读取文本_python 如何读取windows-1252格式文本?
  6. 《机器视觉算法与应用》学习笔记(一)图像采集——照明
  7. 基于射频的石油热解开采的一些资料
  8. 6.深入浅出:差分放大电路——参考《模拟电子技术基础》清华大学华成英主讲
  9. 地图生成工具使用步骤
  10. Django模板实现地址的省市县三级联动
  11. 深度学习:词向量和句向量(Embedding)
  12. 2021年中国兔养殖行业现状及前景分析[图]
  13. AXI总线学习(AXI34)
  14. 宝塔面板安装使用教程
  15. oracle添加索引指定表空间,Oracle 创建索引表空间语法-oracle
  16. 使用Spring构建普通非web的Java应用
  17. 股票买入卖出 LeetCode 变形题 度小满
  18. word调整目录级别
  19. 决策树剪枝的基本策略有预剪枝和后剪枝,请简述并分析两种剪枝策略
  20. VUE入门+5个小案例

热门文章

  1. java-RGB与十六进制的互相转换
  2. 声道测试音频_AirPods Pro 空间音频的这7个问题,你都了解吗?
  3. 读书笔记3——《用户故事与敏捷方法》
  4. 魔域手游如何修改服务器id,魔域互通端游手游架设
  5. 自动驾驶仿真软件汇总-2021
  6. ant接口用什么天线_天线接口 一个叫SMA 另一个叫TNC
  7. 云EC电商cms安装
  8. OOP的核心思想是什么?请简述你对OOP的理解
  9. 分享一个狂雨小说采集规则 - 顶点小说采集
  10. 【控制】动力学建模举例 --> 拉格朗日法