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

广州专业建网站阿里巴巴国际站网页设计教程

广州专业建网站,阿里巴巴国际站网页设计教程,有个做搞笑视频的网站,工作总结个人范文题目一:目标和 问题描述 494. 目标和 - 力扣(LeetCode) 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - ,然后串联起所有整数,可以构造一个 表达式 : 例如&#xff…

题目一:目标和

问题描述

494. 目标和 - 力扣(LeetCode)

给你一个非负整数数组 nums 和一个整数 target 。

向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :

  • 例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。

返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

解题步骤

初看这一题,感觉挺麻烦的,难道要挨个尝试过去吗?

那这个代码又该如何设计??

如果你看过之前的【蓝桥杯速成】| 7.01背包练习生-CSDN博客

就会发现这一题和分割等和子集,最后一块石头的重量是类似的

我们都可以采取大事化小,小事化了的方法解决

不就是加法和减法吗,

由于题目给出每个数字都是正数,target有可能为负数

那我们就把nums里的数分为两部分,一部分做加法addnums,另一部分做减法subnums

那么显然可以得到

addnums+subnums=sum

addnums-subnums=target

运用我们的数学知识来解个方程

addnums=(sum+target)/2

sum和target是给定的,所以说这里可以先做个剪枝

如果不能sum,target不能被2整除,那么肯定找不到答案,

从一堆整数里凑出小数那不是很荒谬嘛!

if((sum+target)%2!=0)

        return 0;

那么除此以外target>sum也是不合理的,就全部加满就是sum怎么可能还变多嘞

if(target > sum)

        return 0; 

那么剩下步骤只需要求 nums中可以有多少种能凑出和为addnums的方案

因为sum固定,求出addnums相当于剩下的都是subnums,这肯定跑不了! 

所以现在的问题就是求出有多少种组合

那么组合问题应该用回溯算法对吧?但是嘞回溯是暴力枚举得到结果的,可能会超时

所以这里我们还是使用动规五部曲,选用二维数组来求解

1.确定dp数组以及下标的含义

本题也是只有一个数组,那么重量和价值的数值是一样的

我们最后要得到的是和为addnums的最多de结果数量

那么 i 表示目前选择数字的下标,j 代表 addnums 的值

dp[ i ][ j ]表示使用 下标为[0, i]的nums[i]能够凑满 j(包括j)这么大容量的包,有dp[ i ][ j ]种方法

vector<vector<int>> dp(nums.size(),vector<int>(addnums+1,0));

2.确定递推公式

这一题与不同路径那题需要考虑清楚的地方是一样的

我们需要的组合数量,不是组合里的元素数量

那么在dp[i][j]这一格的时候

  • 不放物品i:即背包容量为j,里面不放物品i,装满有dp[i - 1][j]中方法。

  • 放物品i: 即:先空出物品i的容量,背包容量为(j - 物品i容量),放满背包有 dp[i - 1][j - 物品i容量] 种方法。

加不加上第i号数字我们都记成同一个情况

所以递推公式应该为

dp[i][j] = dp[i - 1][j] + dp[i - 1][j - nums[i]];

 但 j-nums[i]作为数组下标,是有风险的,万一为负数嘞?

所以要加个判断表示装不下i号物品,此时方案数仍旧是dp[i-1][j],保持不变

if(nums[i]>j) dp[i][j]=dp[i-1][j];

else dp[i][j] = dp[i-1][j]+dp[i-1][j-nums[i]];

 3.初始化

从递推公式可以看出,我们使用这个动态二维数组时,

是利用左上方和正上方两个格子里的值共同得到的,

所以一开始我们就需要这两个方向的值存在才能继续推到后面的

所以初始化第一行和第一列

dp[0][j]就是第一行元素,意为只放0号,把容量为j的背包填满有几种方法

那么只有nums[i]=j的情况下才有一种方法,其它情况都没有办法放进去(太小或太大)

dp[i][0]就是第一列元素,表示背包容量为0,放物品0~i号,装满有几种方式

那答案肯定为1,就是不放物品(不放也是一种方法)

初始化如下:

dp[0][nums[0]] = 1,其它为0

dp[i][0]=1

 但还有个例外,就是物品数值就是0,应该怎么处理,举例看看:

如果有两个物品,物品0为0, 物品1为0,装满背包容量为0的方法有几种?

  • 放0件物品
  • 放物品0
  • 放物品1
  • 放物品0 和 物品1

此时是有4种方法。

其实就是算数组里有t个0,然后按照组合数量求,即 2^t 。

那么这一部分的初始化为:

int numzero=0;

for(int i=0;i<nums.size();i++){

        if(nums[i]==0)        numzero++;

        dp[i][0]=(int) pow(2.0,numzero);

}

统计过程同时初始化 

4.确定遍历顺序

01背包外层遍历物品,里层遍历背包 

for(int i=1;i<nums.size();i++){

        for(int j=0;j<=target;j++){

最后组合一下代码,编译运行试试,如果出现问题需要即时打印dp进行检查

详细代码如下 

code

class Solution {
public:int findTargetSumWays(vector<int>& nums, int target) {int sum=0;for(int i=0;i<nums.size();i++){sum+=nums[i];}if(abs(target)>sum) return 0;if((target+sum)%2==1)   return 0;int addnums=(target+sum)/2;vector<vector<int>> dp(nums.size(),vector<int>(addnums+1,0));if(nums[0]<=addnums) dp[0][nums[0]]=1;dp[0][0]=1;int numzero=0;for(int i=0;i<nums.size();i++){if(nums[i]==0) numzero++;dp[i][0]=(int)pow(2.0,numzero);}for(int i=1;i<nums.size();i++){for(int j=0;j<=addnums;j++){if(nums[i]>j)   dp[i][j]=dp[i-1][j];elsedp[i][j]=dp[i-1][j]+dp[i-1][j-nums[i]];}}return dp[nums.size()-1][addnums];}
};


文章转载自:

http://UrVZNxLC.zwndt.cn
http://IhXmQwSD.zwndt.cn
http://kWdbagaf.zwndt.cn
http://Y8R7Js1i.zwndt.cn
http://q9K1YUll.zwndt.cn
http://PHqz36V1.zwndt.cn
http://dYE2ExqD.zwndt.cn
http://GKCdbYut.zwndt.cn
http://7WFWcS5b.zwndt.cn
http://HKCMEbIF.zwndt.cn
http://bzTaNbYx.zwndt.cn
http://OKVGZC5f.zwndt.cn
http://0ivRuo9p.zwndt.cn
http://sphP2peY.zwndt.cn
http://kz8XvVyj.zwndt.cn
http://0kZXmvUK.zwndt.cn
http://f02jUwWX.zwndt.cn
http://rQVI1Wdz.zwndt.cn
http://typPigkE.zwndt.cn
http://E3PMaxoI.zwndt.cn
http://0odfpD4K.zwndt.cn
http://7kTEl486.zwndt.cn
http://ofyCoUEA.zwndt.cn
http://5rj2oTY6.zwndt.cn
http://onKUBFsn.zwndt.cn
http://OVkuetmU.zwndt.cn
http://W6fQp7g0.zwndt.cn
http://eB4zy8G4.zwndt.cn
http://deJZSvoQ.zwndt.cn
http://Rdn7BAwY.zwndt.cn
http://www.dtcms.com/wzjs/736585.html

相关文章:

  • 园区官方网站建设成都建立网站
  • 网站优化排名方法有哪些模板和网站的区别
  • 在本地做装修在那个网站好为什么手机进网站乱码
  • 个性化定制客户和网站建设做网站有什么语言好
  • 成都市双流区建设局官方网站单页产品销售网站如何做推广
  • 同一个服务器的网站做有链wordpress 音乐
  • 成都专业网站设计制作无锡哪里有做网站的公司
  • 网站开发术语开发公司直接发包绿化景观
  • 沧州网站seo百度搜一下
  • 建设什么企业网站wordpress怎样设置导航栏
  • python3.5 做网站游戏搜索风云榜
  • 旧电脑做网站服务器深圳注册公司推荐
  • 网站多久才能在百度上收到网上做网站怎么做下拉菜单
  • 城市建设游戏模拟网站舆情信息范文
  • 海淀网站建设公司排名wordpress腾讯云cos插件
  • 南宁建行 网站土地流转网站开发
  • 各种大型网站静态网站制作视频
  • 做移动网站优化软湖北网站科技建设
  • 微信建站官网免费注册深圳市住房和建设局官网房源
  • 免费做公司网站能在百度上搜索的到网站怎么做图片动态图片不显示了
  • 网站建设考试多选题个人建设网站如何定位
  • 网站服务器网络农家乐网站模板
  • 国美的网站做的怎么样苏州市郭巷建设局网站
  • 吴江seo网站优化软件北京网站制作17页
  • 网页制作与网站建设宝典扫描版pdf岳阳网站建设
  • seo网站建设 刘贺稳营销专家aseo搜索优化培训
  • 注册商标设计对网站进行优化
  • 专业公司网站开发服务福建手机版建站系统开发
  • 天津网站建站模板网页制作模板中文
  • 企业建网站的案例深圳福田香格里拉大酒店