【算法】DP

【题解】

如果每个排列算一种,则令f[i]表示凑成面值为i的方案数,容易推出f[i]+=f[i-a[j]]。

现在是每个组合才算一种,令f[i][j]第二维表示只使用前j种面值,f[i][j]+=f[i-a[j][k],k=0~j,这样最终算出来的方案就是按一定顺序的,不会重复计算。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=,maxV=;
int n,m,a[maxV];
ll f[maxn][maxV];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
f[][]=;
for(int i=;i<=m;i++){
for(int j=;j<=n;j++)if(i-a[j]>=){
for(int k=;k<=j;k++)f[i][j]+=f[i-a[j]][k];
}
}
ll ans=;
for(int i=;i<=n;i++)ans+=f[m][i];
printf("%lld",ans);
return ;
}

------------------------------------------------------

以上脑洞太大了,其实是完全背包。

每个面值视为物品体积,求总体积为N的方案数。

换种思路,每次考虑加入一种面值,这样就自然不会重复算了。

f[0]=1;

for(int i=1;i<=v;i++)

  for(int j=a[i];j<=n;j++)

    f[j]+=f[j-a[i]];

最新文章

  1. css面包屑导航编号
  2. Atitit org.eclipse.jdt&#160;的ast 架构 Eclipse JDT API&#160;spec
  3. CentOS常用指令
  4. Oracle如何操作级联删除
  5. 亲测linux6.4 安装
  6. java中jvm的工作原理
  7. SPRING 配置文件和类名
  8. CSS 中的内联元素、块级元素、display的各个属性的特点
  9. centos 7 下面安装oracle 11g r2 过程分享
  10. Apache Spark 2.2.0 中文文档 - 概述 | ApacheCN
  11. 关于Swing窗体有时候要放大缩小边框才能显示问题?
  12. weblogic 服务器部署SSL证书
  13. z-index的权重是叠加的
  14. layui学习
  15. Windows android SDK环境配置及判断安装成功
  16. 【转】实习小记-python 内置函数__eq__函数引发的探索
  17. LeetCode 633. 平方数之和
  18. C#程序证书创建工具 (Makecert.exe)
  19. poj3417Network【LCA】【树形DP】
  20. Golang 类型转换整理

热门文章

  1. Spring MVC - URL路径映射
  2. Putty的设置保存
  3. html基础问题总结
  4. 第二篇 Python初识别及变量名定义规范
  5. C 计算金额
  6. Leetcode 672.灯泡开关II
  7. 修复 Ubuntu 中“Unable to lock the administration directory (/var/lib/dpkg/)”
  8. static 关键字解析(转)
  9. java多线程二之线程同步的三种方法
  10. 微信公众号开发java框架:wx4j(MaterialUtils篇)