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盆,摆花时 ...
随机推荐
- JSON中put、accumulate、elemate的区别
JSONObject.put():将value映射到key下,加入在JSONObject对象之前存在一个value存在key下,当前的value会替换之前的value. JSONObject.accu ...
- Kubernetes学习笔记(一)
参考: kubectl Cheat Sheet | Kubernetes Kubernetes kubectl 命令表 _ Kubernetes(K8S)中文文档_Kubernetes中文社区 Pla ...
- mvc和ef如何连接
1.一般加上ef步骤:引入ef包,新建自己的context并继承自DbContext,构造函数里写上链接字符串,属性都是表集合.如何使用:程序中UserContext un = new UserCon ...
- response status is 500 https://localhost:7129/swagger/v1/swagger.json
SwaggerGeneratorException: Conflicting method/path combination "GET Test" for actions - To ...
- WPF 后台实现按数字键滚动DataGrid 当前选中项
最近遇到个项目,设备上没有鼠标,界面为全屏的一个DataGrid,需要实现按小键盘的0和1让DataGrid的当前选中行进行上下滚动 起到重要参考的是: https://blog.csdn.net ...
- CF446D 题解
题意 传送门 给定一张 \(n\) 个点 \(m\) 条边的无向图,每个节点有权值 \(v_i=\) \(0/1\).角色从节点 \(1\) 开始随机游走,走到 \(n\) 停止.求其经过路径上权值和 ...
- GIT 上传文件出错:fatal: Could not read from remote repository. 解决方案
问题 git push -u origin master 执行后报错 fatal: Could not read from remote repository. 解决方案 1. git执行 git ...
- IntelliJ IDEA 生成serialVersionUID
1.设置Settings-->Editor->Inspections 2.实现Serializble
- Apache 基本配置 代理 重定向 跨域 https ssl证书 在windows下常用命令
官网下载地址 https://httpd.apache.org/ => https://httpd.apache.org/docs/current/platform/windows.html#d ...
- Oracle 数据库升级过程中的主要步骤
Oracle 数据库升级包括六个主要步骤. Oracle 数据库的升级步骤工作流 步骤 1:准备升级 Oracle 数据库 熟悉 Oracle 数据库新版本的特性. 确定新版本的升级路径. 选择升级方 ...