NOIP2014普及组
T2】比例简化

其实比较简单,主要是比较的方法以前没看过吧
要学会知识迁移啊!
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
double a,b,l;
int gcd(int x,int y){
if(x%y==0) return y;
else return gcd(y,x%y);
}
int main(){
cin>>a>>b>>l;
//其实很简单,别想复杂了
int suma=l,sumb=1; //注意初值
for(int i=1;i<=l;i++){
for(int j=1;j<=l;j++){
if(gcd(i,j)==1&&(i*b>=j*a)&&(i*sumb<j*suma)){
suma=i;
sumb=j;
}
}
}
cout<<suma<<" "<<sumb<<endl;
return 0;
}
T3】螺旋矩阵

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
int n,x,y;
//又是一道找规律的题。。。我哭 //肯定不能直接构造这个矩阵,肯定会超时
//所以找到特殊的方法,特殊点
//看了题解发现是用层次来找的,分层讨论
//可以分为上面,左边,右边,下面
//比如坐标i,j,他的层次就在于min(i,j,n-i+1,n-j+1)
void dfs(int n,int x,int y){
int layer=min(x,min(y,min(n-x+1,n-y+1)));
int fir=n*n-(n-2*layer+2)*(n-2*layer+2)+1; //这个是第一个
if(layer==x){ //如果在上面,就直接往右边走就可以可
cout<<fir+(y-layer)<<endl;
return;
}
else if(layer==n-y+1){ //在右边,先往右走,再往下走
cout<<fir+(y-layer)+(x-layer)<<endl;
return;
}
else if(layer==y){ //如果是在左边,那么先往右走,再往下走,在网左走,最后往上走
cout<<fir+(n-2*layer+1)+(n-2*layer+1)+(n-2*layer+1)+((n-layer+1)-x)<<endl;
return;
}
else if(layer==n-x+1){ //在下边,先向右走,再向下走,最后向左走
cout<<fir+(n-2*layer+1)+(n-2*layer+1)+((n-layer+1)-y)<<endl;
return;
}
}
int main(){
cin>>n>>x>>y;
dfs(n,x,y);
return 0;
}
T4】子矩阵

这道题还有点复杂
首先选行:dfs选择所有的组合
然后在选定的行里面选择最好的列组合
这里比较难
就是怎么选,因为可以不是连续的,所以要记录所有的行之间相差的状况
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<queue>
#include<map>
#include<vector>
#include<set>
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
int n,m,r,c;
int res=INF;
int t[20],t1[20][20];
int a[20][20];
int v[20];
int f[20];
int temp[20];
//一开始搜索一种行的组合方法,然后就在这选择的行里面,选择得到和最小的列的组合,得到最小的值
//循环各种搜索得到的组合,然后dp就可以
int dp(){
memset(t,0,sizeof(t));
memset(t1,0,sizeof(t1));
for(int i=1;i<=m;i++){
for(int j=1;j<v[0];j++){
t[i]+=abs(a[v[j]][i]-a[v[j+1]][i]); //列相同,这个存储每一列的上面减下面
}
}
for(int i=1;i<m;i++){
for(int j=i+1;j<=m;j++){
for(int k=1;k<=v[0];k++){
t1[i][j]+=abs(a[v[k]][i]-a[v[k]][j]); //i与j之间所有选定列的和
}
}
}
for(int i=1;i<=m;i++) f[i]=t[i];
for(int i=2;i<=c;i++){ //选c列
for(int j=m;j>=i;j--){ //遍历用j,k
f[j]=INF;
for(int k=j-1;k>=i-1;k--) f[j]=min(f[j],f[k]+t1[k][j]);
f[j]+=t[j];
}
}
int ans=INF;
for(int i=c;i<=m;i++){
if(ans>f[i]){
ans=f[i];
//for(int j=1;j<=m;j++) temp[j]=f[j];
}
}
return ans; } void findd(int i,int step){
if(step==r){
res=min(res,dp());
return;
}
for(int j=i;j<=n-r+step+1;j++){
v[++v[0]]=j; //存储当前找到的列号
findd(j+1,step+1); //找到下一个组合
v[v[0]--]=0; //回溯
}
}
int main(){
scanf("%d %d %d %d",&n,&m,&r,&c);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);
}
findd(1,0);
printf("%d\n",res); return 0;
}
NOIP2014普及组的更多相关文章
- 【NOIP2014 普及组】螺旋矩阵
[NOIP2014 普及组]螺旋矩阵 一.题目 [NOIP2014 普及组]螺旋矩阵 时间限制: 1 Sec 内存限制: 128 MB 提交: 18 解决: 0 [提交][状态][讨论版] 题目描 ...
- noip2014普及组——珠心算测验
题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速考察珠 ...
- [NOIP2014] 普及组
珠心算测验 模拟. 将所有“两个不同数之和”装进桶里,扫描原数组记录满足条件的数的个数. /*by SilverN*/ #include<iostream> #include<alg ...
- 螺旋矩阵 noip2014普及组
本题可以直接模拟填数字,也可以直接计算结果. 代码一:(这个代码,缺陷在于数组太大,浪费内存啊.另外,循环次数也不少.总之,时间空间的消耗都不小.) /*======================= ...
- noip2014普及组 比例简化
题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为1498:902. 不过,如 ...
- [NOIP2014普及组]子矩阵
题目:洛谷P2258.Vijos P1914.codevs 3904. 题目大意:给你一个矩阵,要你找一个r行c列的子矩阵,求最小分值(子矩阵和分值的定义见原题). 解题思路:n和m比较小,考虑暴力. ...
- [NOIP2014普及组T1]珠心算测验 - NTT
求数组有多少个数,恰好等于集合中另外两个(不同的)数之和? 注意到数集比较小,而且涉及到下标的加法,可以很自然地想到卷积 注意减去自己加自己的贡献 真是一道NTT练手好题 #include <i ...
- [NOIP2014] 提高组 洛谷P2038 无线网络发射器选址
题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...
- NOIP2002-2017普及组题解
虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*' NOIP2002(clear) #include<bits/stdc++.h> usin ...
- NOIP2012 普及组 T3 摆花——S.B.S.
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...
随机推荐
- 安装最新版cmake
pip install cmake --upgradewhich cmakeln -s $(which cmake) /usr/local/bin/cmake
- python 查找文件夹下以特定字符开头的某类型文件 - os.walk
Python os.walk() 方法 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下.os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处 ...
- GitBook的使用备忘
GitBook环境搭建 npm install -g gitbook-cli # 新建目录,如helloworld cd helloworld # 执行此语句,需等待一段时间 gitbook init ...
- git 与远程仓库关联返回 fatal: remote origin already exists 解决方法
今天领导新建了一个代码仓库,我按照流程一步步推送代码,结果到了关联仓库的时候,返回 fatal: remote origin already exists(远程源已经存在) 下面是解决方法 1.删除远 ...
- keil 常用调试方法
1.内存调试方法, 参考链接: https://blog.51cto.com/u_4029519/5423341 2.汇编调试方法 常用到bootlader和应用程序的调试 1.生成bin文件.汇编文 ...
- centos7.4离线安装.NETCore3.1 环境
1.在有网的情况下把离线包下载到电脑上sudo yum install --downloadonly --downloaddir=/home/mjb/soft/dotnet-sdk-3.1 dotne ...
- Visual Studio 2019注册码
最近在学习Visual Studio,但是晕斗士(筛子系统)提示需要注册码,否则只能试用30天,由于是学习购买就没必要了,找Google找到了一下两段注册码. 目前测试了专业版已经注册成功. Visu ...
- JavaScript Math(算数) 对象
JavaScript Math(算数) 对象 Math(算数)对象的作用是:执行常见的算数任务. 在线实例 round()如何使用 round(). random()如何使用 random() 来返回 ...
- 多个git账户ssh密钥配置
假设两git网站:A.com和B.com,在这两个网站上使用的邮箱和用户名分别为a@mail, userA和b@mail, userB. 清除全局配置 git config --global --li ...
- session共享问题、springboot 版本不统一问题
问题:按照正常的程序将session 共享引入工程,但是一直取不到 原因:springboot 的版本不同导致,存session的springboot 用的是springboot1.5.6,而取ses ...