HDU5800 To My Girlfriend 背包计数dp
分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j
其中s1个物品时必选,s2物品必不选的方案数
那么转移的时候可以考虑,第i个物品是可选可可不选的
- dp[i][j][s1][s2]+=dp[i-1][j][s1][s2]+dp[i-1][j-a[i]][s1][s2]
或者第i个物品必选,或者必不选
- dp[i][j][s1][s2]+=dp[i-1][j-a[i]][s1-1][s2]+dp[i-1][j][s1][s2-1]
一点感想:这个题边界时dp[0][0][0][0]=1;
当i不等于0时,dp[i][0][s1][s2]也是有意义的,因为可以代表s2个物品必不选,所以从0开始
由于空间是O(9E6)的,太大,类似01背包优化成一维O(9e3)
时间复杂度O(N*S*9)(发现又是一道计数dp,一般涉及计数的dp不是特别好做,主要是人傻)
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 1e3+;
const int mod = 1e9+;
int dp[N][][];
int a[N],T,n,s;
inline void up(int &x,int y){
x+=y;if(x>=mod)x-=mod;
}
inline int mul(int x,int y){
int ret=(1ll*x*y)%(1ll*mod);
return ret;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&s);
for(int i=;i<=n;++i)scanf("%d",&a[i]);
memset(dp,,sizeof(dp));
dp[][][]=;
for(int i=;i<=n;++i)
for(int j=s;j>=;--j)
for(int s1=;s1>=;--s1)
for(int s2=;s2>=;--s2){
int tmp=;
up(tmp,dp[j][s1][s2]);
if(j>=a[i])up(tmp,dp[j-a[i]][s1][s2]);
if(s1&&j>=a[i])up(tmp,dp[j-a[i]][s1-][s2]);
if(s2)up(tmp,dp[j][s1][s2-]);
dp[j][s1][s2]=tmp;
}
int ret=;
for(int i=;i<=s;++i)up(ret,dp[i][][]);
ret=mul(ret,);
printf("%d\n",ret);
}
return ;
}
HDU5800 To My Girlfriend 背包计数dp的更多相关文章
- hdu 5800 To My Girlfriend(背包变形)
To My Girlfriend Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
Problem Description "Well, it seems the first problem is too easy. I will let you know how fool ...
- CodeForces 176B Word Cut (计数DP)
Word Cut Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- [DP之计数DP]
其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...
- HDU4815/计数DP
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...
- HDU 6377 度度熊看球赛 (计数DP)
度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 计数dp
计数dp 计数类的$dp$没做过几个,所以之前都放到"思维"标签下了,后来发现原来这属于一类问题啊...搬过来了. 管道取珠:https://www.lydsy.com/Judge ...
- [SDOI2010]地精部落[计数dp]
题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...
- 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...
随机推荐
- IDL_GUI
菜单栏设计 PRO IDLGui ;构建界面 ;显示 ;添加事件 tlb=WIDGET_BASE(xsize=400,ysize=400,/column,mbar=mbar);实现基类 file=WI ...
- Ubuntu刷新DNS
linux刷新dns的缓存方法是: sudo /etc/init.d/nscd restart 如果发现提示命令找不到: sudo: /etc/init.d/nscd: command not fou ...
- Java:网络编程之UDP的使用
java.net 类 DatagramSocket 此类表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务的发送或接收点. java.net 类 DatagramPacket 此类表示数 ...
- iOS:VFL语言
VFL语言 介绍: 什么是VFL语言? VFL全称是Visual Format Language,翻译过来是“可视化格式语言” VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言 ...
- 第一次做的struts2与spring整合
参考:http://www.cnblogs.com/S-E-P/archive/2012/01/18/2325253.html 这篇文章说的关键就是“除了导入Struts2和Spring的核心库之外, ...
- Spring boot 整合jsp和tiles模板
首先贴上我的pox.xml文件,有详细的支持注释说明 <?xml version="1.0" encoding="UTF-8"?> <proj ...
- USACO Section 2.4: Fractions to Decimals
乍看题目感觉有难度,实际分析后其实是道简单题 /* ID: yingzho1 LANG: C++ TASK: fracdec */ #include <iostream> #include ...
- [转]matlab如何复制spectrum scope的图
2014-03-17 22:23:01 来自:http://www.ilovematlab.cn/thread-38713-1-1.html 如何将spectrum scope的图复制出来? 解决方法 ...
- Entity Framework学习 - 4.Code First升级数据库
1.在nuget控制台中执行:Enable-Migrations 2.将出现的configuation.cs文件中的AutomaticMigrationsEnabled属性改为true 3.在nuge ...
- JAVA中的内部类使用总结
1) 内部类的优点是:内部类可以访问外部类的私有成员变量,而不需要new外部类的对象. 2) 内部类又分为:静态内部类.匿名内部类.局部内部类.成员内部类. 3) ...