参加比赛却没做出题目,郁闷中,散分
去参加学校组织的编程比赛,预赛挺顺利的,到了正式比赛就得到了这么一个郁闷的结果,唉……
还记得几个题目
输入m n,表示m*n数组,下面输入输入这个数组,数组的元素包括0 1 $ S D,0表示能通过,1表示不能通过,找到从S开始到$结束的路径,要求包含的D数目最少,输出这个最小的数目
例如:
4 5
$DDDD
D0000
DDDDD
S0000
答案是2
输入m n,以及m个整数,m本书放在n层的书架上,m个整数表示每本书的高度,放的时候书的顺序不能改变,比如1 2 3 4 4本书,只能第一层 1,第二层2 3 4,或者第一层1 2,第二层3等等,而不能跳过2把1和3放在一起,要求输出书架的最小高度
输入一个整数m,分成5 25 50的和,和式中每个数出现的数目不限,求能有多少种分发,数据超级大,结果的位数有几十几百,肯定要高精度
21 22 23 24 ……
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
这样的数组,其中1的坐标为(0,0),x轴正方向向右,y向下,输入一个坐标,输出该坐标是上的数字
m个球放在n个盒子里面,盒同球不同,问有多少种分发,结果的范围也很大,要求输出后四位,少于四位的用0补齐
给一个图以及两个点,要求找出这两个点之间的最短路径,如果不能联通就输出不能联通的信息。图是以每个点和其他点的权值的形式给出的
还有一个题目想不起来了,唉,无限郁闷啊,整个比赛都陷入了对第一题的debug中
[解决办法]
别恢心,继续努力。
[解决办法]
支持
[解决办法]
在那里倒下,就在那里爬起来!
与楼主共勉!
[解决办法]
这还用想吗,走密宫+最短路径的问题
[解决办法]
书架的问题答案如下:
public class BookShelf
{
private int[] bookThinks;
private int[] slotThinks;
private int averageThink;
private int mixThink;
public BookShelf(int[] bookThinks)
{
this.bookThinks = bookThinks;
this.slotThinks = null;
this.averageThink = 0;
this.mixThink = -1;
}
private void initSlotThink(int slotCount)
{
this.slotThinks = new int[slotCount];
for (int i = 0; i < slotThinks.length; i++)
{
this.slotThinks[i] = 0;
}
}
private void getAverageThink(int slotCount)
{
int sum = 0;
int max = 0;
for (int think : bookThinks)
{
sum += think;
if (think > max)
{
max = think;
}
}
this.averageThink = sum / slotCount;
if (max > this.averageThink)
{
this.averageThink = max;
}
}
private void judgeMinThink()
{
int max = 0;
for (int think : slotThinks)
{
if (think > max)
{
max = think;
}
}
if (mixThink == -1 || max < mixThink)
{
mixThink = max;
}
}
public int getMinThink(int slotCount)
{
getAverageThink(slotCount);
initSlotThink(slotCount);
this.mixThink = -1;
putBook(0, 0, slotCount);
return this.mixThink;
}
private void putBook(int startIndex, int currSlot, int slotCount)
{
if (startIndex == this.bookThinks.length && currSlot <= slotCount)
{
judgeMinThink();
return;
}
if (currSlot == slotCount && startIndex < this.bookThinks.length)
{
return;
}
while (this.slotThinks[currSlot] < this.averageThink && startIndex < this.bookThinks.length)
{
this.slotThinks[currSlot] += this.bookThinks[startIndex++];
}
putBook (startIndex, currSlot + 1, slotCount);
if (this.slotThinks[currSlot] > this.averageThink)
{
this.slotThinks[currSlot] -= this.bookThinks[--startIndex];
putBook (startIndex, currSlot + 1, slotCount);
}
this.slotThinks[currSlot] = 0;
}
public static void main(String[] args)
{
//初始化每本书的厚度
BookShelf shelf = new BookShelf(new int[]{1, 2, 3, 4, 4});
//getMinThink的参数是书架的层数
System.out.println(shelf.getMinThink(4));
}
}
[解决办法]
晕,昨天天大的题目?
第一题 BFS
书架是3维DP
change那题是大数+母函数,推荐用java解
最短路径是最简单的dijkstra
最后一个你没想起的也是母函数,不过我用DFS也过了-。-!
[解决办法]
21 22 23 24 ……
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13
这样的数组,其中1的坐标为(0,0),x轴正方向向右,y向下,输入一个坐标,输出该坐标是上的数字;
解答:
int retval=0;
int midval =0;
int Rund =max(abs(m_x),abs(m_y));
midval =(2*Rund-1) * (2*Rund-1);
if(m_x > m_y)
{
retval =midval + abs(m_y -Rund) + abs(m_x -Rund);
}
else
{
retval =midval + 4*Rund + abs(m_y -(0 -Rund)) + abs(m_x -(0 -Rund));
}
m_out =retval;
[解决办法]
不必郁闷
在哪跌倒就在哪爬起来