1、问题描述:

悠悠假期同叔叔一起去书店,他选中了六本书,每本书的单价(单位:元)分别为:3.1,1.7,2,5.3,
0.9 和7.2。不巧的是,叔叔只带了十几块钱,为了让悠悠高兴,叔叔同意买书,但提出了一个要求,要悠
悠从六本书中选出若干本,使得单价相加所得的和同10 最接近。请编程帮助悠悠解决这个问题。输出格
式:第一行输出1 个整数,表示组合方法数量;第二行开始,一行输出一种价格组合。

#include"cstdio"
#include"cmath"
#include"vector"
using namespace std;
double p[]={3.1,1.7,,5.3,0.9,7.2};
int a[];
vector<double> vec[<<];
double maxn;
int cnt;
void solve()
{
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
{
double s=;
for(int j=;j<;j++)
{
s+=a[j]*p[j];
}
if(fabs(s-)<maxn)
{
maxn=fabs(s-);
for(int i=;i<cnt;i++)
{
vec[i].clear();//若最小值更新,则将结果清空
}
cnt=;
}
if(fabs(fabs(s-)-maxn)<0.000001)
{
for(int j=;j<;j++)
{
if(a[j]!=) vec[cnt].push_back(p[j]);
}
cnt++;
} }
}
void print()
{
printf("%d\n",cnt);
for(int i=;i<cnt;i++)
{
for(int j=;j<vec[i].size();j++)
{
printf("%lf ",vec[i][j]);
}
printf("\n");
}
}
int main()
{
maxn=;
solve();
print();
return ;
}

2、问题描述:

将1、2、3、4、5 和6 填入下表中,要使得每一列右边的数字比左边的数字大,每一行下面的数字比
上面的数字大。请编程计算共有几种填写方法?输出:第一行输出1 个整数,表示填写方法数量;第二行,
依次输出每种填写方式。

#include"cstdio"
#include"set"
#include"vector"
using namespace std;
int a[]={,,,,,};
set<int> vec;
vector<int> ss[**];
int cnt;
bool check()
{
for(int i=;i<;i++)
{
if(!(a[i+]>a[i]&&a[i++]>a[i+]&&a[i+]>a[i]))
{
return false;
}
}
if(!(a[]>a[]))
{
return false;
}
return true;
}
void solve()
{
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
for(a[]=;a[]<=;a[]++)
{
vec.clear();
for(int j=;j<;j++)
{
vec.insert(a[j]);
}
if(vec.size()==&&check())
{
for(int j=;j<;j++)
{
ss[cnt].push_back(a[j]);
}
cnt++;
}
}
}
void print()
{
printf("%d\n",cnt);
for(int i=;i<cnt;i++)
{
for(int j=;j<;j++)
{
printf("%d ",ss[i][j]);
if(j==) printf("\n");
}
printf("\n\n");
}
}
int main()
{
solve();
print();
return ;
}

3、问题描述:

在一个旅馆中住着六个不同国籍的人,他们分别来自美国(US)、德国(GER)、英国(UK)、法国
(FRA)、俄罗斯(RUS)和意大利(ITA)。他们的名字叫A、B、C、D、E 和F。名字的顺序与上面的
国籍不一定是相互对应的。现在已知:
1)A 和美国人是医生。 2)E 和俄罗斯人是技师。
3)C 和德国人是技师。 4)B 和F 曾经当过兵,而德国人从未参过军。
5)法国人比A 年龄大;意大利人比C 年龄大。
6)B 同美国人下周要去西安旅行,而C 同法国人下周要去杭州度假。
请编程分析出A、B、C、D、E 和F 各是哪国人?(程序必须算法分析过程,不可直接输出结果)
输出格式:第一行输出A 是哪国人,第二行输出B 是哪国人......以此类推。(例如:A is US)

方法一、全排列搜索

#include"algorithm"
#include"vector"
#include"string"
#include"iostream"
using namespace std;
int a[]={,,,,,};
vector<string> ss;
bool check1()
{
if(a[]!=&&a[]!=&&a[]!=&&a[]!=)
{
return true;
}
return false;
}
bool check2()
{
if(a[]==)
{
return true;
}
return false;
}
bool check3()
{
if(a[]!=&&a[]!=&&a[]!=)
{
return true;
}
return false;
}
bool check4()
{
if(a[]!=&&a[]!=&&a[]!=)
{
return true;
}
return false;
}
bool check5()
{
if(a[]!=)
{
return true;
}
return false;
}
void print()
{
for(int i=;i<;i++)
{
string s="";
switch(i)
{
case :{ s+=('A'+a[i]);s+=" is US";break;}
case :{ s+=('A'+a[i]);s+=" is GER";break;}
case :{ s+=('A'+a[i]);s+=" is UK";break;}
case :{ s+=('A'+a[i]);s+=" is FRA";break;}
case :{ s+=('A'+a[i]);s+=" is RUS";break;}
case :{ s+=('A'+a[i]);s+=" is ITA";break;}
}
ss.push_back(s);
}
sort(ss.begin(),ss.end());
for(int i=;i<ss.size();i++)
{
cout<<ss[i]<<endl;
}
}
int main()
{
int ans=;
do{
if(check1()&&check2()&&check3()&&check4()&&check5())
{
break;
}
}while(next_permutation(a,a+));
print();
return ;
}

方法二、消元法

#include"cstdio"
using namespace std;
struct node{
int y,x;
node(int cy,int cx):y(cy),x(cx){}
node(){}
};
int a[][]={
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,,
,,,,,
};
const char* s[]={"US","GER","UR","FRA","RUS","ITA"};
int ans[];
node unique()
{
for(int i=;i<;i++)
{
int cnt=;
int k;
for(int j=;j<;j++)
{
if(a[j][i]==)
{
cnt++;
k=j;
}
}
if(cnt==)
{
node no(k,i);
return no;
}
}
node no(-,-);
return no;
} void update(int row)
{
for(int i=;i<;i++)
{
a[row][i]=;
}
}
bool solve()
{
for(int i=;i<;i++)
{
node no;
no = unique();
if(no.x==-)
{
printf("error\n");
return false;
}
update(no.y);
ans[no.y]=no.x;
}
return true;
}
void print(bool flag)
{
if(flag)
{
for(int i=;i<;i++)
{
printf("%c is %s\n",'A'+i,s[ans[i]]);
}
}
else
{
printf("error\n");
}
}
int main()
{
print(solve());
return ;
}

4、问题描述:

扬扬喜欢滑雪,可是为了获得速度,滑的区域必须向下倾斜,扬扬想知道在一个区域中最长底滑坡。
区域由一个二维数组表示。数组的每个数字代表点的高度。下面是一个例子:
1 3 5 7
23 25 27 9
21 31 29 11
19 17 15 13
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的
滑坡为31-25-3-1,长度为4。当然31-29-27-...-5-3-1 更长。事实上,这是最长的一条,长度为16。
输入:每组数据的第一行表示区域的行数R 和列数C(1 <= R,C <= 100)。下面是R 行,每行有C 个整数,
代表高度h,0<=h<=10000。
输出:输出最长区域的长度。

#include"cstdio"
#include"algorithm"
using namespace std;
const int MAXN=;
int h[MAXN][MAXN];
int mp[MAXN][MAXN];
int n,m;
int dx[]={,,-,};
int dy[]={,,,-};
int rdfs(int y,int x)
{
if(mp[y][x]) return mp[y][x];
int k=;
for(int i=;i<;i++)
{
int ny=y+dy[i];
int nx=x+dx[i];
if(<=ny&&ny<n&&<=nx&&nx<m&&h[ny][nx]<h[y][x])
{
k=max(rdfs(ny,nx),k);
}
}
return mp[y][x]=k+;
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=;i<n;i++){
for(int j=;j<m;j++) scanf("%d",&h[i][j]);} int ans=;
for(int i=;i<n;i++){
for(int j=;j<m;j++) ans=max(rdfs(i,j),ans);} printf("%d\n",ans); return ;
}

JUST第二界算法设计大赛题解的更多相关文章

  1. 摹客 · Veer 第二届设计大赛邀你来战!

    2018年12月,摹客设计大赛一年一度一归来. 继2017年摹客全国首届原型设计大赛成功举办后,本次大赛是摹客第二届设计大赛.大赛由摹客主办,Veer独家冠名赞助,iSlide和创客贴协办,国内多家知 ...

  2. 算法设计与分析 - 李春葆 - 第二版 - html v2

    1 .1 第 1 章─概论   1.1.1 练习题   1 . 下列关于算法的说法中正确的有( ).   Ⅰ Ⅱ Ⅲ Ⅳ .求解某一类问题的算法是唯一的   .算法必须在有限步操作之后停止   .算法 ...

  3. 算法设计与分析 - 李春葆 - 第二版 - pdf->word v3

    1.1 第1章─概论 练习题 . 下列关于算法的说法中正确的有( ). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 Ⅳ. ...

  4. 不做Next,争做Nest——庆科首届智能硬件创新设计大赛产生决赛12强

      智能硬件,Wi-Fi互联,谁是下一个Nest?邀你共见证! 2014年3月到7月.由上海庆科信息技术有限公司主办的首届 MXCHIP 智能硬件创新设计大赛--"寻找下一个nest&quo ...

  5. Mockplus设计大赛获奖选手专访 | High音:轻松生活,随心嗨音

    "看似低调,实则高调的设计,UI设计是用了功力,主页功能和内容一览无余,方便用户选择,金字黑底,给予用户极好的奢华体验.原来听歌也是一种视觉享受.创新性源于对听歌氛围的把握,大幅的图片,刺激 ...

  6. 最大子段和的DP算法设计及其效率测试

    表情包形象取自番剧<猫咪日常> 那我也整一个 曾几何时,笔者是个对算法这个概念漠不关心的人,由衷地感觉它就是一种和奥数一样华而不实的存在,即便不使用任何算法的思想我一样能写出能跑的程序 直 ...

  7. 『嗨威说』算法设计与分析 - 动态规划思想小结(HDU 4283 You Are the One)

    本文索引目录: 一.动态规划的基本思想 二.数字三角形.最大子段和(PTA)递归方程 三.一道区间动态规划题点拨升华动态规划思想 四.结对编程情况 一.动态规划的基本思想: 1.1 基本概念: 动态规 ...

  8. LeetCode初级算法--设计问题02:最小栈

    LeetCode初级算法--设计问题02:最小栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  9. 算法设计与分析(李春保)练习题答案v1

    1.1第1 章─概论 1.1.1练习题 1.下列关于算法的说法中正确的有(). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模 ...

随机推荐

  1. UITableview刷新时界面“乱跑”现象

    Self-Sizing在iOS11下是默认开启的,Headers, footers, and cells都默认开启Self-Sizing,所有estimated 高度默认值从iOS11之前的 0 改变 ...

  2. iOS 符号化崩溃日志

    1.获取一下三个文件   1. crash报告(.crash文件) 2. 符号文件 (.dsymb文件) 3. 应用程序文件 (appName.app文件,把IPA文件后缀改为zip,然后解压,Pay ...

  3. Python菜鸟之路:Python基础-类(2)——成员、成员修饰符、异常及其他

    三大成员 在Python的面向对象中,主要包括三大成员:字段.方法.属性 字段 类成员的字段又可分为普通字段.静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,代码示例如下: ...

  4. ssm框架与shiro的整合小demo,用idea开发+maven管理

    shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...

  5. Flex自定义组件开发

    一般情况下需要组件重写都是由于以下2个原因:1.在FLEX已有组件无法满足业务需求,或是需要更改其可视化外观等特性时,直接进行继承扩展.2.为了模块化设计或进一步重用,需要对FLEX组件进行组合.而F ...

  6. 让input表单输入框不记录输入过信息的方法

    有过表单设计经验的朋友肯定知道,当我们在浏览器中输入表单信息的时候,往往input文本输入框会记录下之前提交表单的信息,以后每次只要双击input文本输入框就会出现之前输入的文本,这样有时会觉得比较方 ...

  7. 事务的四大特性ACID

    ACID是指数据库事务的四大特性,是由Jim Gray在19世纪70年代后期提出的概念,1983年Andreas Reuter and Theo Härder创造了ACID这个缩略语用来描述这四大特性 ...

  8. jquery 初篇

    一.什么是jQuery对象? jQuery 对象就是通过jQuery包装DOM对象后产生的对象. jQuery 对象是 jQuery 独有的. 如果一个对象是 jQuery 对象, 那么它就可以使用  ...

  9. 什么是gitlab CI ?CI代表什么?

    CI是Continuous Integration的简称,就是持续集成的意思. 就是说你代码改动了,测试了,提交了,持续集成系统会自动构建(编译等等).持续集成的理念是每个提交的版本都应该是可交付的, ...

  10. Spring Cloud之整合ZK作为注册中心

    Eureka已经闭源了,用zk可以替代之 Eureka 作为注册中心 Dubbo也是zk作为注册中心的 Zookeeper简介 Zookeeper是一个分布式协调工具,可以实现服务注册与发现.注册中心 ...