企业网站做优化,客户网站开发全流程图,干运维为什么会废了,网站服务器维护技术第1题#xff1a;最佳路径 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从三角形的顶部到底部有很多条不同的路径。对于每条路径#xff0c;把路径上面的数加起来可以得到一个和#xff0c;和最大的路径称为最佳路径。你的任务就是求出最佳路径上的…
第1题最佳路径 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 从三角形的顶部到底部有很多条不同的路径。对于每条路径把路径上面的数加起来可以得到一个和和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。 注意路径上的每一步只能从一个数走到下一层上和它最近的下边(正下方)的数或者右边(右下方)的数。 时间限制1000 内存限制65536 输入 第一行为三角形高度100h1同时也是最底层边的数字的数目。 从第二行开始每行为三角形相应行的数字中间用空格分隔。 输出 最佳路径的长度数值。 样例输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 样例输出 30 提示 如何采用动态规划的思想对问题进行分解。 这个问题可以使用动态规划来解决。我们可以定义一个二维数组dp其中dp[i][j]表示从三角形顶部到第i行第j列的最佳路径的数字之和。
根据题目的要求对于每个位置(i, j)可以从上方的位置(i-1, j-1)或者(i-1, j)到达。因此状态转移方程可以表示为
dp[i][j] max(dp[i-1][j-1], dp[i-1][j]) triangle[i][j]其中triangle[i][j]表示三角形第i行第j列的数字。
以下是使用C语言实现的代码
#include stdio.h
#include stdlib.h#define MAX_HEIGHT 100int max(int a, int b) {return (a b) ? a : b;
}int calculateMaxPath(int height, int triangle[][MAX_HEIGHT]) {int dp[MAX_HEIGHT][MAX_HEIGHT];// 初始化dp数组dp[0][0] triangle[0][0];for (int i 1; i height; i) {dp[i][0] dp[i - 1][0] triangle[i][0];dp[i][i] dp[i - 1][i - 1] triangle[i][i];}// 计算最佳路径的数字之和for (int i 2; i height; i) {for (int j 1; j i; j) {dp[i][j] max(dp[i - 1][j - 1], dp[i - 1][j]) triangle[i][j];}}// 找出最大路径的数字之和int maxSum 0;for (int j 0; j height; j) {maxSum max(maxSum, dp[height - 1][j]);}return maxSum;
}int main() {int height;scanf(%d, height);int triangle[MAX_HEIGHT][MAX_HEIGHT];for (int i 0; i height; i) {for (int j 0; j i; j) {scanf(%d, triangle[i][j]);}}int result calculateMaxPath(height, triangle);printf(%d\n, result);return 0;
}在主函数中我们首先读取输入的三角形的高度height然后读取三角形的数字并存储在二维数组triangle中。接下来我们调用calculateMaxPath函数计算最佳路径的数字之和并将结果输出。
第2题邮票收集 小A是个邮票收集爱好家他有n种面值的邮票每种邮票都有无数张。一天小B想要寄信需要一共面值和为k的邮票组合。小A想要知道拼出面值为k的邮票最少需要多少张。 时间限制1000 内存限制131072 输入 输入是多组数据。(不超过10组) 每组数据的第一行正整数nk表示邮票的种类数目和目标要拼出的钱。(0 n ≤ 100, 0 k ≤ 1000 ) 接下来的一行有n个正整数ai(0 ai ≤ 1000)。 若nk0表示输入结束。 输出 每组数据输出一行一个数分别表示拼出k需要的最少的邮票数量。 如果不存在能够拼出k的方案输出-1。 样例输入 4 10 1 2 3 4 5 16 1 2 3 4 5 2 7 4 5 0 0 样例输出 3 4 -1 提示 第一组数据: 10 442 第二组数据16 5551 第三组数据 不存在。 这个问题可以使用动态规划来解决。我们可以定义一个一维数组dp其中dp[i]表示拼出面值为i的邮票所需的最少数量。
根据题目的要求对于每个金额i我们可以考虑选择每种面值的邮票然后更新最少数量。状态转移方程可以表示为
dp[i] min(dp[i], dp[i - a[j]] 1), 其中 0 j n其中a[j]表示第j种面值的邮票。
以下是使用C语言实现的代码
#include stdio.h
#include stdlib.h
#include limits.h#define MAX_N 100
#define MAX_K 1000int min(int a, int b) {return (a b) ? a : b;
}int calculateMinStamps(int n, int k, int stamps[]) {int dp[MAX_K 1];// 初始化dp数组dp[0] 0;for (int i 1; i k; i) {dp[i] INT_MAX;}// 计算最少邮票数量for (int i 1; i k; i) {for (int j 0; j n; j) {if (i stamps[j] dp[i - stamps[j]] ! INT_MAX) {dp[i] min(dp[i], dp[i - stamps[j]] 1);}}}return (dp[k] INT_MAX) ? -1 : dp[k];
}int main() {int n, k;while (scanf(%d %d, n, k) 2) {if (n 0 k 0) {break; // 输入结束}int stamps[MAX_N];for (int i 0; i n; i) {scanf(%d, stamps[i]);}int result calculateMinStamps(n, k, stamps);printf(%d\n, result);}return 0;
}在主函数中我们使用一个循环来读取多组数据。对于每组数据我们首先读取邮票的种类数目n和目标金额k然后读取每种面值的邮票并将它们存储在数组stamps中。接下来我们调用calculateMinStamps函数计算拼出目标金额所需的最少邮票数量并将结果输出。
第3题切割回文 阿福最近对回文串产生了非常浓厚的兴趣。 如果一个字符串从左往右看和从右往左看完全相同的话那么就认为这个串是一个回文串。例如“abcaacba”是一个回文串“abcaaba”则不是一个回文串。 阿福现在强迫症发作看到什么字符串都想要把它变成回文的。阿福可以通过切割字符串使得切割完之后得到的子串都是回文的。 现在阿福想知道他最少切割多少次就可以达到目的。例如对于字符串“abaacca”最少切割一次就可以得到“aba”和“acca”这两个回文子串。 时间限制1000 内存限制65536 输入 输入的第一行是一个整数 T (T 20) 表示一共有 T 组数据。 接下来的 T 行每一行都包含了一个长度不超过的 1000 的字符串且字符串只包含了小写字母。 输出 对于每组数据输出一行。该行包含一个整数表示阿福最少切割的次数使得切割完得到的子串都是回文的。 样例输入 3 abaacca abcd abcba 样例输出 1 3 0 提示 对于第一组样例阿福最少切割 1 次将原串切割为“aba”和“acca”两个回文子串。 对于第二组样例阿福最少切割 3 次将原串切割为“a”、“b”、“c”、“d”这四个回文子串。 对于第三组样例阿福不需要切割原串本身就是一个回文串。 这个问题可以使用动态规划来解决。我们可以定义一个一维数组dp其中dp[i]表示前i个字符组成的子串最少需要切割几次才能使得子串都是回文的。
根据题目的要求对于每个位置i我们可以考虑将子串切割为两部分前半部分为回文子串后半部分为回文子串。如果前半部分是回文子串那么我们只需要判断后半部分是否是回文子串即判断dp[j] 1是否更小。状态转移方程可以表示为
dp[i] min(dp[i], dp[j] 1), 其中 j i 且 s[j1...i]是回文子串其中s[j1...i]表示字符串中从位置j1到位置i的子串。
以下是使用C语言实现的代码
#include stdio.h
#include stdlib.h
#include string.h#define MAX_LEN 1000int min(int a, int b) {return (a b) ? a : b;
}int isPalindrome(char str[], int start, int end) {while (start end) {if (str[start] ! str[end]) {return 0; // 不是回文串}start;end--;}return 1; // 是回文串
}int calculateMinCut(char str[]) {int len strlen(str);int dp[MAX_LEN];int isPal[MAX_LEN][MAX_LEN];// 初始化dp数组和isPal数组for (int i 0; i len; i) {dp[i] i; // 最多切割i次for (int j 0; j len; j) {isPal[i][j] 0;}}// 计算最少切割次数for (int i 0; i len; i) {for (int j 0; j i; j) {if (str[i] str[j] (i - j 2 || isPal[j 1][i - 1])) {isPal[j][i] 1;if (j 0) {dp[i] 0; // 整个子串是回文串不需要切割} else {dp[i] min(dp[i], dp[j - 1] 1);}}}}return dp[len - 1];
}int main() {int T;scanf(%d, T);while (T--) {char str[MAX_LEN];scanf(%s, str);int result calculateMinCut(str);printf(%d\n, result);}return 0;
}在主函数中我们首先读取整数T表示有T组数据。然后使用一个循环读取每组数据的字符串并调用calculateMinCut函数计算最少切割次数并将结果输出。
第4题小球放盒子 有N个相同的球M个不同的盒子每个盒子最多放K个球 请计算将这N个球全部放入盒子中的方案数模1000007后的结果 时间限制10000 内存限制131072 输入 三个正整数依次为NMK 输出 输出方案数模1000007后的结果 样例输入 4 2 3 样例输出 3 提示 总共有3种方案依次为 { 3 1 }{ 2 2 }{ 1 3 }。 对于100%的数据 NM ≤ 5000
这个问题可以使用组合数学的知识来解决。我们需要计算将N个球放入M个盒子中的方案数。
首先考虑将N个球放入一个盒子中的方案数。由于每个盒子最多放K个球我们可以使用0个、1个、2个…K个球来填充这个盒子。因此对于一个盒子可以有K1种放球的方案。
接下来考虑将N个球放入M个盒子中的方案数。我们可以将问题转化为将N个球放入M个盒子中每个盒子至少放1个球的方案数。假设我们已经将每个盒子放入了一个球那么剩余的N-M个球可以按照第一个考虑的情况放入这M个盒子中。根据乘法原理将N-M个球放入M个盒子中的方案数为(M1)^(N-M)。
因此将N个球放入M个盒子中的方案数为(M1)^(N-M)。最终的结果需要对1000007取模。
以下是使用C语言实现的代码
#include stdio.hint powerMod(int base, int exponent, int mod) {int result 1;while (exponent 0) {if (exponent % 2 1) {result (result * base) % mod;}base (base * base) % mod;exponent / 2;}return result;
}int calculateBallInBox(int N, int M, int K) {int result powerMod(M 1, N - M, 1000007);return result;
}int main() {int N, M, K;scanf(%d %d %d, N, M, K);int result calculateBallInBox(N, M, K);printf(%d\n, result);return 0;
}在主函数中我们首先读取整数N、M、K分别表示球的数量、盒子的数量和每个盒子最多放置的球的数量。然后调用calculateBallInBox函数计算将N个球放入M个盒子中的方案数并将结果输出。 文章转载自: http://www.morning.msmtf.cn.gov.cn.msmtf.cn http://www.morning.rrcxs.cn.gov.cn.rrcxs.cn http://www.morning.ftgwj.cn.gov.cn.ftgwj.cn http://www.morning.btqrz.cn.gov.cn.btqrz.cn http://www.morning.pbxkk.cn.gov.cn.pbxkk.cn http://www.morning.srckl.cn.gov.cn.srckl.cn http://www.morning.sdamsm.com.gov.cn.sdamsm.com http://www.morning.inheatherskitchen.com.gov.cn.inheatherskitchen.com http://www.morning.zczkm.cn.gov.cn.zczkm.cn http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn http://www.morning.nsrlb.cn.gov.cn.nsrlb.cn http://www.morning.mlnbd.cn.gov.cn.mlnbd.cn http://www.morning.wgzgr.cn.gov.cn.wgzgr.cn http://www.morning.lcxdm.cn.gov.cn.lcxdm.cn http://www.morning.rlwcs.cn.gov.cn.rlwcs.cn http://www.morning.fy974.cn.gov.cn.fy974.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.kcwkt.cn.gov.cn.kcwkt.cn http://www.morning.tfwg.cn.gov.cn.tfwg.cn http://www.morning.rnngz.cn.gov.cn.rnngz.cn http://www.morning.nqbpz.cn.gov.cn.nqbpz.cn http://www.morning.tstwx.cn.gov.cn.tstwx.cn http://www.morning.wkknm.cn.gov.cn.wkknm.cn http://www.morning.bnfjh.cn.gov.cn.bnfjh.cn http://www.morning.nggbf.cn.gov.cn.nggbf.cn http://www.morning.plqqp.cn.gov.cn.plqqp.cn http://www.morning.jrqw.cn.gov.cn.jrqw.cn http://www.morning.nndbz.cn.gov.cn.nndbz.cn http://www.morning.nlglm.cn.gov.cn.nlglm.cn http://www.morning.mqwdh.cn.gov.cn.mqwdh.cn http://www.morning.xwlmr.cn.gov.cn.xwlmr.cn http://www.morning.lgnrl.cn.gov.cn.lgnrl.cn http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn http://www.morning.cjsrg.cn.gov.cn.cjsrg.cn http://www.morning.benqc.com.gov.cn.benqc.com http://www.morning.dnwlb.cn.gov.cn.dnwlb.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.ypklb.cn.gov.cn.ypklb.cn http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn http://www.morning.xhlht.cn.gov.cn.xhlht.cn http://www.morning.jfxth.cn.gov.cn.jfxth.cn http://www.morning.qhtlq.cn.gov.cn.qhtlq.cn http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn http://www.morning.mnyzz.cn.gov.cn.mnyzz.cn http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn http://www.morning.bnmfq.cn.gov.cn.bnmfq.cn http://www.morning.qrhh.cn.gov.cn.qrhh.cn http://www.morning.rbxsk.cn.gov.cn.rbxsk.cn http://www.morning.ryglh.cn.gov.cn.ryglh.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.qwyms.cn.gov.cn.qwyms.cn http://www.morning.kdnrp.cn.gov.cn.kdnrp.cn http://www.morning.tlfmr.cn.gov.cn.tlfmr.cn http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn http://www.morning.slnz.cn.gov.cn.slnz.cn http://www.morning.rnxs.cn.gov.cn.rnxs.cn http://www.morning.pxbrg.cn.gov.cn.pxbrg.cn http://www.morning.qsszq.cn.gov.cn.qsszq.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.sgtq.cn.gov.cn.sgtq.cn http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn http://www.morning.kldtf.cn.gov.cn.kldtf.cn http://www.morning.wrwcf.cn.gov.cn.wrwcf.cn http://www.morning.lsjtq.cn.gov.cn.lsjtq.cn http://www.morning.qtyfb.cn.gov.cn.qtyfb.cn http://www.morning.thlzt.cn.gov.cn.thlzt.cn http://www.morning.rfkyb.cn.gov.cn.rfkyb.cn http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn http://www.morning.wsyq.cn.gov.cn.wsyq.cn http://www.morning.wqbrg.cn.gov.cn.wqbrg.cn http://www.morning.nrbqf.cn.gov.cn.nrbqf.cn http://www.morning.xxknq.cn.gov.cn.xxknq.cn http://www.morning.zqcdl.cn.gov.cn.zqcdl.cn http://www.morning.stwxr.cn.gov.cn.stwxr.cn http://www.morning.rlhh.cn.gov.cn.rlhh.cn http://www.morning.kxryg.cn.gov.cn.kxryg.cn http://www.morning.wdpbq.cn.gov.cn.wdpbq.cn http://www.morning.pcwzb.cn.gov.cn.pcwzb.cn