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盆,摆花时 ...
随机推荐
- 钉钉群机器人群发[ PHP ]
// secret 机器人设置 - 加签秘钥 // access_token 机器人设置 - Webhook带此参数 // message 机器人设置- 关键词设置的内容需要和message一致 pu ...
- 设置VScode中console.log快捷键
"Print to console": { "prefix": "log", "body": [ "conso ...
- 理解cpu过高的逻辑思维与分析方法
工作经常碰到负载过高,cpu占有太高,系统变慢,运维通常做的第一件事就是通过top或者uptime命令来了解系统负载的情况 通常uptime后会出现三个小数,就是平均负载值,那真正的了解这个平均负载值 ...
- abc288g
通过这道题复习一下sosdp. sosdp用于求解子集和. 我们设\(f[i][s]\)表示后\(i\)位是\(s\)的子集,前\(n-i\)位等于\(s\)的\(a\)中的数的和 在从\(f[i][ ...
- maven(web)项目,不自动出现overlays的上级web项目
不自动出现overlays目录,如下: 上面选择一项, 最后部署至tomcat或是其他中间件上面,overlays的上关联的上级项目就会出现
- 开发谷歌插件--web3钱包(一)
之前开发了一款谷歌插件,因为很简单没有什么好记录的. 这次记录下一款新的钱包功能的插件,其中遇到的问题,以及解决方案. 首先遇到的问题就是唤醒: 小狐狸钱包应该都用过,点击图标就会唤起登录页面(pop ...
- 部署及配置Mycat数据库中间件
Mycat关键特性关键特性支持SQL92标准支持MySQL.Oracle.DB2.SQL Server.PostgreSQL等DB的常见SQL语法遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用 ...
- fail-fast简介
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308762.html fail-fast简介(使用concurrentHashMap可以完美避免这个问题 ...
- nacos2.1 新增配置发布失败。请检查参数是否正确
使用官方的docker部署方式,部署了一个单节点nacos server,部署完了后发布配置信息,报错"新增配置发布失败.请检查参数是否正确" 解决方法: 在nacos mysql ...
- 【Qt】汇总Qt坑若干
1..pro里添加了类以后调用时还是报错? solution:注意添加或者修改以后要保存保存保存,否则Qt是不会自己更新的! 2.在ui界面修改了类的成员名,保存了以后.cpp里调用,成员名还是不更新 ...