尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

C/C++每日一练19

C/C++每日一练19 第一题小易的升级之路题目描述小易初始攻击力为 a有 n 个怪兽每个怪兽有防御力 x [i] 和攻击力 y [i]。若小易当前攻击力 x [i]则击败怪兽后攻击力增加 y [i]否则无法击败。求小易最终的攻击力。算法原理每次选择防御力最低的怪兽击败才能最大化攻击力提升。所以先将怪兽按防御力升序排序然后依次判断能否击败能击败则累加攻击力直到无法击败或击败所有怪兽。代码cpp运行#include iostream #include vector #include algorithm using namespace std; int main() { int n, a; cin n a; vectorpairint, int monsters(n); for (int i 0; i n; i) { cin monsters[i].first monsters[i].second; } sort(monsters.begin(), monsters.end()); for (auto m : monsters) { if (a m.first) { a m.second; } else { break; } } cout a endl; return 0; }第二题礼物的最大价值题目描述m×n 的网格中每个格子有礼物价值从左上角出发每次只能向右或向下移动求到达右下角的最大礼物价值。算法原理动态规划。设 dp [i][j] 为到达 (i,j) 的最大价值转移方程 dp [i][j] max (dp [i-1][j], dp [i][j-1]) grid [i][j]。边界第一行只能从左向右dp [0][j] dp [0][j-1] grid [0][j]第一列只能从上到下dp [i][0] dp [i-1][0] grid [i][0]。可优化为一维数组 dp [j]每次更新时 dp [j] max (dp [j], dp [j-1]) grid [i][j]。代码cpp运行#include iostream #include vector #include algorithm using namespace std; int main() { int m, n; cin m n; vectorvectorint grid(m, vectorint(n)); for (int i 0; i m; i) { for (int j 0; j n; j) { cin grid[i][j]; } } vectorint dp(n, 0); dp[0] grid[0][0]; for (int j 1; j n; j) { dp[j] dp[j-1] grid[0][j]; } for (int i 1; i m; i) { dp[0] grid[i][0]; for (int j 1; j n; j) { dp[j] max(dp[j], dp[j-1]) grid[i][j]; } } cout dp[n-1] endl; return 0; }第三题对称之美题目描述判断一个字符串是否是回文串即正读和反读都一样例如 “abcba” 是回文串“abca” 不是。算法原理双指针法。左指针从字符串开头右指针从结尾依次比较两个指针指向的字符是否相等。若所有对应字符都相等则是回文串否则不是。代码cpp运行#include iostream #include string using namespace std; int main() { string s; cin s; int left 0, right s.size() - 1; bool is_palindrome true; while (left right) { if (s[left] ! s[right]) { is_palindrome false; break; } left; right--; } cout endl; return 0; }谢谢
返回列表