#include <cstdio>
#include <iostream> using namespace std; const int max_n = +;
const int max_m = +;
const int max_a = +;
const int max_M = 1e4+; int n,m,M;
int a[max_n];
int dp[max_M][max_M];
// dp[i][j]:从前i件商品中,选出j个的组合数 void solve()
{
// 初始化dp数组,无论当前有多少件,一件都不取的方法只有一种哦
for(int i=;i<=n;++i)
{
dp[i][]=;
} // 从第一件物品开始取
for(int i=;i<=n;++i)
{
// 从取一件开始,0件时已初始化为1
for(int j=;j<=m;++j)
{
// 注意这里考虑最原始的搞复杂度朴素算法情况,发现有重复的,进行降复杂度变化
// 数组中,考虑为数组上一行的所有可行解之和
// 改为当前位置,同行前一元素与同列上一元素之和
// 当前行因为最多只能取a[i]个,所以在满足j的条件下,还要考虑此种情况 // j<=a[i]时,可以取遍之前元素,直接上左相加即可
if(j--a[i] < )
{
dp[i][j]=(dp[i-][j] + dp[i][j-]) % M;
}
// 否则只能取a[i]个
// 考虑数组的动态变化过程
// 所遍历的元素总数为a[i]不变,这a[i]个元素在数组中的位置,往后移了一位
// 移位前一个的最先元素不满足,应减去,然后加上新加元素(即当前元素之上的元素即可)
else
{
dp[i][j]=(dp[i-][j] + dp[i][j-] - dp[i-][j--a[i]]) % M;
}
// 可以输出查看数组,加深理解
// 也可以在出错时输出检查条件和初值
//printf("%d ",dp[i][j]);
}
//printf("\n");
} printf("%d\n",dp[n][m]);
} int main()
{
scanf("%d %d %d",&n,&m,&M);
// a[i]: 第i件商品的数量
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
}
solve(); return ;
} /*test
3 3 1000
1 2 3 */

多重集组合数 简单dp的更多相关文章

  1. POJ 3046 Ant Counting ( 多重集组合数 && 经典DP )

    题意 : 有 n 种蚂蚁,第 i 种蚂蚁有ai个,一共有 A 个蚂蚁.不同类别的蚂蚁可以相互区分,但同种类别的蚂蚁不能相互区别.从这些蚂蚁中分别取出S,S+1...B个,一共有多少种取法. 分析 :  ...

  2. 简单dp总结

    ### 简单dp总结 本文是阅读<挑战程序设计第二版>其中关于dp章节所作总结.将简要描述dp的部分知识. 一.dp是什么? dp在计算机专业学科中全称是动态规划(dynamic prog ...

  3. Vijos_1792_摆花_(动态规划,多重集组合数)

    描述 https://vijos.org/p/1792 共n种花,第i种花有a[i]个,要摆m个,同一种花连续且花按照序号从小到大排,问共有多少种摆花方案.   描述 小明的花店新开张,为了吸引顾客, ...

  4. POJ_3046_Ant_Counting_(动态规划,多重集组合数)

    描述 http://poj.org/problem?id=3046 n种蚂蚁,第i种有ai个,不同种类的蚂蚁可以相互区分,但同一种类的蚂蚁不能相互区分,从这些蚂蚁中取出s,s+1,s+2,...,b- ...

  5. poj 3046 Ant Counting(多重集组合数)

    Ant Counting Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total ...

  6. HDU 1087 简单dp,求递增子序列使和最大

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  7. Codeforces Round #260 (Div. 1) A. Boredom (简单dp)

    题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...

  8. codeforces Gym 100500H A. Potion of Immortality 简单DP

    Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...

  9. 简单dp --- HDU1248寒冰王座

    题目链接 这道题也是简单dp里面的一种经典类型,递推式就是dp[i] = min(dp[i-150], dp[i-200], dp[i-350]) 代码如下: #include<iostream ...

随机推荐

  1. sublime: javascript/css 的格式化

    Sublime Text 3 破解版 + 注册机 + 汉化包 + 教程 http://www.xiumu.org/note/sublime-text-3.shtml 1.sublime 如果控制菜单选 ...

  2. STM32片外SRAM作运行内存

    本例演示用的软硬件: 片内外设驱动库:STM32CubeF41.24.1的HAL库1.7.6,2019年4月12日 IDE:MDK-ARM 5.28.0.0,2019年5月 开发板:片外SRAM挂在F ...

  3. Chrome恢复显示网址 https:// 和 www

    文章来自我的博客: https://blog.ljyngup.com/archives/686.html/ Chrome这个新规弄得我也很蛋疼,每次一点输入框就突然突出来一下.后来在Hostloc论坛 ...

  4. 《Head first设计模式》之工厂模式

    工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到了子类. 预定披萨 假设你有一个披萨店,预定披萨的代码可能是这么写的: Pizza orderPizz ...

  5. 校招必看硬核干货:C++怎么学才能进大厂

    目录 关于小猿 如何找资料 自我定位 岗位需求 学习路线及时间安排 资料获取方式 C++语言在历史舞台上出现了不短的时间,虽然一直面临着Python,Go等新语言的挑战,但它在基础架构和大型软件上的优 ...

  6. KubeSphere企业级分布式多租户容器管理平台

    KubeSphere企业级分布式多租户容器管理平台 KubeSphere安装部署2.1.0DEV版本

  7. 兄弟连 企业shell笔试题 1-15

    这些题目收集自网络,对比原来的答案,又根据实际情况重新编写了自己的答案 企业实践题1: (生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境 ...

  8. zabbix-mysql迁移分离

    io过高,迁移mysql 停掉zabbix 导出数据库的zabbix库 导入到新机器,并启动mysql 1:修改zabbix_server.conf文件里DB相关的地址,用户名和密码. vim /et ...

  9. 还是端口回流问题 TCP协议解析

    还是上一篇的问题 在一内部局域网中, client  内网地址为 10.0.0.2     web  服务器内网地址为 10.0.0.1    外网地址为  211.6.15.1    域名为  xx ...

  10. 1163 - Bank Robbery

    1163 - Bank Robbery   In one very cold morning, Mark decides to rob a bank. But while trying hacking ...