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

  1. 【NOIP2014 普及组】螺旋矩阵

    [NOIP2014 普及组]螺旋矩阵 一.题目 [NOIP2014 普及组]螺旋矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 18  解决: 0 [提交][状态][讨论版] 题目描 ...

  2. noip2014普及组——珠心算测验

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及.    某学校的珠心算老师采用一种快速考察珠 ...

  3. [NOIP2014] 普及组

    珠心算测验 模拟. 将所有“两个不同数之和”装进桶里,扫描原数组记录满足条件的数的个数. /*by SilverN*/ #include<iostream> #include<alg ...

  4. 螺旋矩阵 noip2014普及组

    本题可以直接模拟填数字,也可以直接计算结果. 代码一:(这个代码,缺陷在于数组太大,浪费内存啊.另外,循环次数也不少.总之,时间空间的消耗都不小.) /*======================= ...

  5. noip2014普及组 比例简化

    题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为1498:902. 不过,如 ...

  6. [NOIP2014普及组]子矩阵

    题目:洛谷P2258.Vijos P1914.codevs 3904. 题目大意:给你一个矩阵,要你找一个r行c列的子矩阵,求最小分值(子矩阵和分值的定义见原题). 解题思路:n和m比较小,考虑暴力. ...

  7. [NOIP2014普及组T1]珠心算测验 - NTT

    求数组有多少个数,恰好等于集合中另外两个(不同的)数之和? 注意到数集比较小,而且涉及到下标的加法,可以很自然地想到卷积 注意减去自己加自己的贡献 真是一道NTT练手好题 #include <i ...

  8. [NOIP2014] 提高组 洛谷P2038 无线网络发射器选址

    题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...

  9. NOIP2002-2017普及组题解

    虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*' NOIP2002(clear) #include<bits/stdc++.h> usin ...

  10. NOIP2012 普及组 T3 摆花——S.B.S.

    题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

随机推荐

  1. SQL逻辑查询语句执行顺序—练习题

    在做练习题之前要重点熟悉select 的执行顺序 1.SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table& ...

  2. 物料Classification 分类系统

    作用:可以追加物料的属性,因为在物料主界面字段是有限的,并且并不是符合所有企业的业务,可以使用追加属性的方式给物料添加各式各样的属性 1.创建特性,Tcode:CT04 2.创建分类 Tcode:CL ...

  3. 3.Linux安装docker

    Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中. 进入docker官网找到安装文档 https://docs ...

  4. 剪裁圆形图片cropie

    <!DOCTYPE html> <html> <head> <script src="https://cdn.bootcss.com/jquery/ ...

  5. fabric2.2学习笔记1

    fabric2.2学习笔记1 20201303张奕博 2023年1月9日 hyperledger fabric 结构分析 每个Server作用: AdminServer:控制该节点的命运,可以删除该节 ...

  6. JS篇(008)-require 与 import 的区别

    答案:两者的加载方式不同.规范不同 第一.两者的加载方式不同,require 是在运行时加载,而 import 是在编译时加载 require('./a')(); // a 模块是一个函数,立即执行 ...

  7. csss线条中间粗两边细

    效果 <div class="hr-line-div"></div> .hr-line-div { margin: 0 auto; height: 2px; ...

  8. jeecg 导出加批注

    public static void main(String[] args) throws IOException { // 创建工作簿对象 XSSFWorkbook wb = new XSSFWor ...

  9. holiday04

    第四天 查看文件内容 命令 英文 作用 cat 文件名 concatenate 查看.创建.合并.追加文件等功能 more 文件名 more 分屏显示文件内容 grep 搜索文本 文件名 grep 搜 ...

  10. Delphi中var和out

    var: 传递的是参数的地址 out: 以返回值的形式返回结果,类似函数的效果:可以实现一个函数返回多个值