当前位置: 首页 > wzjs >正文

网站专栏建设徐州建设工程造价信息网

网站专栏建设,徐州建设工程造价信息网,ie显示wordpress网页不完整,天津市建设教育培训中心的网站这是完全背包问题。 由于求的是组合数,所以外层循环只能是对硬币遍历,内层循环只能是对总金额的遍历。 另外,虽然题目数据保证结果符合 32 位带符号整数。但是第28个测试用例,dp[j]dp[j-conis[i]]中间结果会整数溢出&#xff0c…

这是完全背包问题。

由于求的是组合数,所以外层循环只能是对硬币遍历,内层循环只能是对总金额的遍历。

另外,虽然题目数据保证结果符合 32 位带符号整数。但是第28个测试用例,dp[j]+dp[j-conis[i]]中间结果会整数溢出,需要特别处理这种情况。

第一版代码

class Solution {
public:int change(int amount, vector<int>& coins) {int n = coins.size();//dp[j]表示从coins中任选若干个硬币,被选中的硬币的价值总和等于j的选法数量vector<int> dp(amount+1,0);//除了dp[0]外都初始化为0,表示没有硬币可选的时候没有办法选到大于0的价值总和(选法为0)dp[0] = 1;//表示没有硬币可选的时候,选择0个硬币,选到的硬币价值总和等于0的选法有1种for(int i = 0;i < n;i++){for(int j = coins[i];j <= amount;j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
};

 可以看到第28个测试用例,会溢出:

第二版代码

把数据类型改成long long 仍然会溢出:

class Solution {
public:int change(int amount, vector<int>& coins) {int n = coins.size();//dp[j]表示从coins中任选若干个硬币,被选中的硬币的价值总和等于j的选法数量vector<long long> dp(amount+1,0);//除了dp[0]外都初始化为0,表示没有硬币可选的时候没有办法选到大于0的价值总和(选法为0)dp[0] = 1;//表示没有硬币可选的时候,选择0个硬币,选到的硬币价值总和等于0的选法有1种for(int i = 0;i < n;i++){for(int j = coins[i];j <= amount;j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
};

结果:

 第三版代码

中间结果溢出,则直接返回0。这样处理,可以通过用例,但中间结果溢出,是不是代表dp[amount]一定是0,这是个有待思考的问题?但从做题角度来说,这样刚好可以通过。

class Solution {
public:int change(int amount, vector<int>& coins) {int n = coins.size();//dp[j]表示从coins中任选若干个硬币,被选中的硬币的价值总和等于j的选法数量vector<int> dp(amount+1,0);//除了dp[0]外都初始化为0,表示没有硬币可选的时候没有办法选到大于0的价值总和(选法为0)dp[0] = 1;//表示没有硬币可选的时候,选择0个硬币,选到的硬币价值总和等于0的选法有1种for(int i = 0;i < n;i++){for(int j = coins[i];j <= amount;j++){if((long)dp[j] + (long)dp[j-coins[i]] > std::numeric_limits<int>::max())return 0;dp[j] = dp[j] + dp[j-coins[i]];}}return dp[amount];}
};

第四版代码

把数据类型改成double试试看,发现可以通过

class Solution {
public:int change(int amount, vector<int>& coins) {int n = coins.size();//dp[j]表示从coins中任选若干个硬币,被选中的硬币的价值总和等于j的选法数量vector<double> dp(amount+1,0);//除了dp[0]外都初始化为0,表示没有硬币可选的时候没有办法选到大于0的价值总和(选法为0)dp[0] = 1;//表示没有硬币可选的时候,选择0个硬币,选到的硬币价值总和等于0的选法有1种for(int i = 0;i < n;i++){for(int j = coins[i];j <= amount;j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
};

 第28个测试用例的coins是

{2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564,566,568,570,572,574,576,578,580,582,584,586,588,780,936,1170,1560,2340,4680}

第五版代码

采用leetcode官方题解的办法。这种办法相比于第三版代码,逻辑上的正确性更好理解。

class Solution {
public:int change(int amount, vector<int>& coins) {int n = coins.size();//valid[j]表示是否能够从coins中选择若干个硬币使得所选硬币的金额总和等于jvector<bool> valid(amount+1,false);valid[0] = true;for(int i = 0;i < n;i++){for(int j = coins[i];j <= amount;j++){valid[j] = valid[j] || valid[j-coins[i]];}}if(!valid[amount])return 0;//dp[j]表示从coins中任选若干个硬币,被选中的硬币的价值总和等于j的选法数量vector<int> dp(amount+1,0);//除了dp[0]外都初始化为0,表示没有硬币可选的时候没有办法选到大于0的价值总和(选法为0)dp[0] = 1;//表示没有硬币可选的时候,选择0个硬币,选到的硬币价值总和等于0的选法有1种for(int i = 0;i < n;i++){for(int j = coins[i];j <= amount;j++){dp[j] += dp[j-coins[i]];}}return dp[amount];}
};


文章转载自:

http://HMK90Yhx.pqqxc.cn
http://d701QH9v.pqqxc.cn
http://AJhmm9Cz.pqqxc.cn
http://4BwwZU89.pqqxc.cn
http://E5vGaRPd.pqqxc.cn
http://duBgH4Dp.pqqxc.cn
http://FIR8PjRm.pqqxc.cn
http://hPMLjseJ.pqqxc.cn
http://IM0OW2l3.pqqxc.cn
http://41qmJs7W.pqqxc.cn
http://rSQZMYLo.pqqxc.cn
http://Ay7AV8YZ.pqqxc.cn
http://oCHvYp5g.pqqxc.cn
http://C2JzauXt.pqqxc.cn
http://Dog4iUyU.pqqxc.cn
http://ElM4Ram3.pqqxc.cn
http://JuxURfZr.pqqxc.cn
http://ZtoMu76m.pqqxc.cn
http://tmJPuFJi.pqqxc.cn
http://pfIvie7M.pqqxc.cn
http://9PPw3ekT.pqqxc.cn
http://Ipe7HDIO.pqqxc.cn
http://RBcPXrrL.pqqxc.cn
http://D4gjuQr5.pqqxc.cn
http://vE7FB1Ab.pqqxc.cn
http://2Gf28uLB.pqqxc.cn
http://RGqZv9SM.pqqxc.cn
http://QMD6goGB.pqqxc.cn
http://LJAw9VJ3.pqqxc.cn
http://esFXrLXn.pqqxc.cn
http://www.dtcms.com/wzjs/610413.html

相关文章:

  • 网站建设中模板代码呼市推广网站
  • 无限建站系统宁波seo推广公司排名
  • 如何免费注册网站平台2015做哪个网站致富
  • 外贸公司英文网站怎么做免费制作网站方案
  • 注册公司如何做网站wordpress主题后门
  • 什么是php网站开发钦州市建设网站
  • 营销型网站的分类不包含好看的ui网站页面设计
  • 网站开发员岗位职责外贸整合推广
  • 公司网站建设厂家网站开发框架是什么
  • 做催收的网站若羌县铁路一建设网站
  • 企业网站icp备案申请盘石网站做的怎么样
  • 网站加速代码骏驰网站建设
  • 热门网站建设招商项目网站免费正能量破解版
  • 优化网站平台香奈儿网站建设的目标
  • 医疗网站专题怎样做网站系统接口500异常
  • 做网站的尺寸1920网站上的漂浮怎么做
  • 网站建设和实现wordpress任意文件删除漏洞
  • 织梦制作手机网站模板wap网站建设哪家好
  • 好吊顶网站做网站是做广告吗
  • 天津做公司的网站网站建设浦东
  • 书店网站模板下载微营销工具有哪些
  • 哪个网站做黄金交易最好wordpress get cat
  • 二级网站内容建设要求北京外贸网站制作公司
  • 乐清网络网站建设青海高端网站建设价格
  • 找网站做任务qq红包wordpress页面后缀.html和
  • 网站淘宝客一般怎么做手机装修设计软件app
  • 确定网站文案简单asp网站源码
  • 在哪个网站做视频可以赚钱网站发布与推广方式
  • 事业单位网站方案wordpress即时聊天插件
  • 成都网站开发公司绍兴柯桥哪里有做网站的