【20221215】【每日一题】爬楼梯进阶(ACM模式)
创始人
2024-04-23 22:35:13
0

在爬楼梯的基础上,改为一次可以爬1阶、2阶、...一直到m阶,问一共有多少种办法爬到楼顶?


思路:这是一个完全背包问题,因为爬完一阶后,还可以再爬一阶,可以重复取;

动规五部曲

1、dp数组下标及其含义:背包容量为j的背包一共有dp[j]种办法装满;

2、递推关系式:背包装满的问题、dp[j]+=dp[j-nums[i]];

3、初始化:dp[0]=1,其余为0;

4、遍历顺序:归根到底还是排序问题,不同的顺序可以视为不同的方法,先背包后物品,背包为正序。

5、举例验证dp数组。


1、getline使用方法:getline(<字符数组chs>,<读取字符的个数n>,<终止符>)

2、stoi:string to int

3、find_if用法:按功能查找元素  

  • find_if( iterator beg, iterator end, _pred)
  • 按值查找元素,找到的话返回指定位置的迭代器,找不到则返回结束迭代器位置
  • beg :开始迭代器
  • end :结束迭代器
  • _pred :函数或者谓词 (返回bool类型的仿函数)

例子:

class GreaterFive
{
public:bool operator()(int val){return val > 5;}
};void test1()
{vector v;for (int i = 0; i < 10; i++){v.push_back(i);}vector::iterator pos = find_if(v.begin(), v.end(), GreaterFive());if (pos == v.end()){cout << "未找到!" << endl;}else{cout << "找到>5的数字:" << *pos << endl;}
}

 

#include 
#include 
#include 
#include 
using namespace std;
class Solution {
public:int combinationSum4(vector& nums, int target) {//初始化vector dp(target + 1, 0);dp[0] = 1;//遍历顺序 由于要求为排列结果,所以先背包、后物品for (int j = 0; j <= target; j++){for (int i = 0; i < nums.size(); i++){if (j >= nums[i] && dp[j] < INT_MAX - dp[j - nums[i]])  dp[j] += dp[j - nums[i]];}}return dp[target];}
};void trimLeftTrailingSpaces(string& input) {input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) {return !isspace(ch);}));
}void trimRightTrailingSpaces(string& input) {input.erase(find_if(input.rbegin(), input.rend(), [](int ch) {return !isspace(ch);}).base(), input.end());
}vector stringToIntegerVector(string input) {vector output;trimLeftTrailingSpaces(input);trimRightTrailingSpaces(input);input = input.substr(1, input.length() - 2);stringstream ss(input);ss.str(input);string item;char delim = ',';while (getline(ss, item, delim)) {output.push_back(stoi(item));}return output;
}int stringToInteger(string input) {return stoi(input);
}int main() {string line;while (getline(cin, line)) {vector nums = stringToIntegerVector(line);getline(cin, line);int target = stringToInteger(line);int ret = Solution().combinationSum4(nums, target);string out = to_string(ret);cout << out << endl;}return 0;
}

相关内容

热门资讯

绿能慧充回购进展:已斥资711... 绿能慧充数字能源技术股份有限公司于2025年5月7日发布关于股份回购进展公告,披露了公司回购股份的相...
被特朗普当面羞辱,卡尼回应:加... 财联社5月7日讯(编辑 牛占林)当地时间周二,加拿大总理卡尼在白宫与美国总统特朗普举行了会晤,然而特...
迎丰科技回购股份比例达1.02... 迎丰科技于2025年5月7日发布公告,披露了公司以集中竞价交易方式回购股份的进展情况。此次回购旨在用...
甘肃酒钢宏兴钢铁:截至4月末尚... 甘肃酒钢集团宏兴钢铁股份有限公司于2025年4月18日召开第八届董事会第二十次会议,审议通过以集中竞...
政银联动为百姓送上反诈“大餐” 转自:衢州日报  本报讯 (通讯员 叶啸) 近期,龙游农商银行联合金融监管总局龙游监管支局、龙游县公...
际华集团回购进展:已斥资344... 际华集团股份有限公司于2025年5月7日发布股份回购进展公告,披露了自2024年12月开启回购计划后...
伊利股份营收1158亿稳居亚洲...   近日,伊利股份(600887.SH)发布2024年年报及2025年一季报。2024年,公司实现营...
成都东站 成都南站单日旅客发送... 转自:成都日报锦观成都东站 成都南站单日旅客发送量创历史新高 本报讯 (成都日报锦观新闻记者 ...
践行金融与文旅产业“双向奔赴” 转自:衢州日报  记者 毛瑜琼 文/摄 通讯员 庄晨雨 王宏明 王瑞琦  在常山的青山绿水间,一场金...
美国10年期国债发行中标收益率...   美国财政部发行420亿美元10年期国债,中标收益率报4.342%,低于纽约时间下午1点投标截止时...
东方证券拟斥2.5亿至5亿元回...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 2025年5月6日,...
千年茶韵与新潮茶饮将在这里跨时... 转自:成都日报锦观揭秘茶博会成都主题馆千年茶韵与新潮茶饮将在这里跨时空碰撞 茶博会成都主题馆。...
开展优待证上门激活服务 转自:衢州日报  本报讯 (记者 毛瑜琼 通讯员 洪文燕) “我腿脚不便,正发愁激活优待证的事情,没...
中福海峡(平潭)发展拟斥800... 中福海峡(平潭)发展股份有限公司于2024年6月27日召开第十一届董事会2024年第五次会议,审议通...
保健品虚假的“洋外衣”需要尽早... 转自:衢州日报  唐传艳  你买的“保税仓发货”的保健品,可能是假进口。近日,媒体记者接到消费者的反...
5月20日起 四川推出“免陪照... 转自:成都日报锦观5月20日起 四川推出“免陪照护服务” 本报讯 (成都日报锦观新闻记者 杨升...
加快推进全国统一大市场建设 转自:成都日报锦观加快推进全国统一大市场建设 □杨连星 当前中国面临传统比较优势减弱和...
徐工机械回购股份前夕:前十大股... 2025年4月26日,徐工集团工程机械股份有限公司(以下简称“徐工机械”)召开第九届董事会第三十二次...
重庆轨道交通24号线 长轨焊接... 施工现场,工人对钢轨头进行无缝焊接。 松扣件、打磨除锈、对位焊接……昨日,在重庆轨道交通24号线一期...
迎送旅客73.2万人次,同比增... 5月6日,重庆江北机场发布消息,据初步统计,今年五一假期,重庆江北国际机场完成旅客吞吐量73.2万人...