博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
挑战多重部分和问题
阅读量:5172 次
发布时间:2019-06-13

本文共 1095 字,大约阅读时间需要 3 分钟。

可套用此模板

题意:有n种不同的数字a[i],每种各b[i]个,判断这些数字可以组成多少个不大于m的数,组成的这些数分别是多少,

                   判断是否可以组成m。

题解dp[i+1][j]:用前i种数加和得到j时第i种数剩余多少个(不能加和得到i的情况下为-1)

如果前i种数相加能得到 j 的话,第i个数可以留下b[i]个,

如果前i种数相加得到j-a[i]时第i种数还剩下k(k>0)个,用i种数相加得到j时,第i种数还剩余k-1个

      b[i](dp[i][j]>=0)

dp[i+1][j]=  -1(j<a[i]||dp[i+1][j-a[i]]<=0)

      dp[i+1][j-a[i]]-1

#include
#include
#include
using namespace std;int n,m;int a[100],b[100];int dp[100];void solve(){ memset(dp,-1,sizeof(dp)); dp[0]=0; for(int i=0;i
=0)//前i种数已经组成j dp[j]=b[i]; else if(j
<=0)//加a[i]就越界,或者b[i]<0 dp[j]=-1; else dp[j]=dp[j-a[i]]-1;//前i个数组成j-a[i],用一个a[i]组成j } } int ans=0; for(int i=1;i<=m;i++) { if(dp[i]>=0) { ans++; cout<
<<" ";//可以组成的数分别时什么 } } cout<
=0)// cout<<"yes"<
>n>>m) { for(int i=0;i
>a[i]; } for(int i=0;i
>b[i]; } solve(); } return 0;}

 

转载于:https://www.cnblogs.com/renwjing/p/7561318.html

你可能感兴趣的文章
数组套字典排序
查看>>
【Selenium2】【HTMLTestRunner】
查看>>
一些常用的前端基础操作
查看>>
.Net remoting, Webservice,WCF,Socket区别
查看>>
ASP.NET Core Web读取appsettings.json中的配置
查看>>
HttpClient如何解决302重定向问题
查看>>
阅读阿里巴巴开发人员手册1
查看>>
macbook pro 2016 2017 15寸 雷电3 外接显卡 epu 简单教程(不修改UEFI)
查看>>
【知识碎片】JavaScript篇
查看>>
基于Debian的Linux发行版安装深度音乐及其插件,支持ubunut16
查看>>
java折半查找(递归版)
查看>>
java课程设计(总结)
查看>>
pandas-如何得到某一个值所在的行
查看>>
非常强的用户体验的网站功能
查看>>
webpack
查看>>
如何批量删除.svn文件
查看>>
QThread的用法:开启与退出
查看>>
javascript ajax 脚本跨域调用全解析
查看>>
《Velocity 模板使用指南》中文版[转]
查看>>
flask + websocket实现简单的单聊和群聊
查看>>