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盆,摆花时 ...
随机推荐
- 监听 view 初始化时
new ViewTreeObserverRegister().observe(getContentView(), new ViewTreeObserver.OnGlobalLayoutListener ...
- Hyper-V虚拟机在Win2019server中共用一个公网IP
Hyper-V虚拟机在Win2019server中共用一个公网IP 有时生产环境中希望一台宿主机上的多台虚拟机共用一个IP出口,按以下操作处理即可. 环境: Windows 2019 server D ...
- Windows11 微软提供三种路径 安装程序应用
Windows11 微软提供三种路径 安装程序应用
- 吴恩达老师机器学习课程chapter06——支持向量机与核函数
吴恩达老师机器学习课程chapter06--支持向量机与核函数 本文是非计算机专业新手的自学笔记,高手勿喷. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第十二章. 目录 吴 ...
- linux系统过滤ip地址总结
Perl模块用法 安装Perl模块 # 官网地址 https://metacpan.org/pod/Regexp::Common # 下载地址 https://cpan.metacpan.org/au ...
- disp
str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg); disp(s ...
- AngularJS UI
1, angular ui 自定义弹框 <script type="text/ng-template" id="stackedModal.html"> ...
- 1255. 得分最高的单词集合 (Hard)
问题描述 1255. 得分最高的单词集合 (Hard) 你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score. 请你帮忙计算玩家 ...
- Qt6以上安装速度慢解决-国内镜像加速
1.安装抓包软件Fiddler最新版本 Fiddler30天试用 2.在软件下方输入栏内粘贴以下命令 urlreplace download.qt.io mirrors.tuna.tsinghua.e ...
- Software--电商平台系统--P2 支撑基础设施 Infrastructure
2018-01-11 18:19:49 架构 客户体验 Ajax 交互技术. 网站快速加载且响应灵敏,则应该缓存商品数据. 灵活的缓存机制,以支持任何类型的存储(即分布式存储或内存中存储). 日志功 ...