题意:求选中若干个数,满足和为S,且不能选中下表i, j 和选中k, l的情况总数量。

  思路:DP[i][j][k][l] i:前i个和为j,选中k个和不选中l个的情况数量,那么我们的转换应该是在必选/必不选中扩展,还有就是可以都不用,和最多不超过2个选和不选。然后由于i、j之间可以互换位置,k、l之间也可以互换位置所以结果需要乘以4.

#include<bits/stdc++.h>
using namespace std; typedef long long ll; const int maxn = 1e3 + ;
const int maxm = 1e6 + ;
const int mod = 1e9 + ; unsigned dp[maxn][maxn][][];
int a[maxn]; int main(){
int T, n, s;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[][a[]][][] = ;
dp[][a[]][][] = ;
dp[][][][] = ;
dp[][][][] = ;
for(int i = ; i <= n; i ++){
for(int j = ; j <= s; j ++) {
int tmp = j + a[i];
if(tmp <= s)
for(int k = ; k <= ; k ++){
dp[i][tmp][][k] = (dp[i][tmp][][k] + dp[i - ][j][][k]) % mod;
dp[i][tmp][][k] = (dp[i][tmp][][k] + dp[i - ][j][][k]) % mod;
dp[i][tmp][][k] = (dp[i][tmp][][k] + dp[i - ][j][][k]) % mod;
dp[i][tmp][][k] = (dp[i][tmp][][k] + dp[i - ][j][][k]) % mod;
dp[i][tmp][][k] = (dp[i][tmp][][k] + dp[i - ][j][][k]) % mod;
}
for(int k = ; k <= ; k ++){
dp[i][j][k][] = (dp[i][j][k][] + dp[i - ][j][k][]) % mod;
dp[i][j][k][] = (dp[i][j][k][] + dp[i - ][j][k][]) % mod;
dp[i][j][k][] = (dp[i][j][k][] + dp[i - ][j][k][]) % mod;
dp[i][j][k][] = (dp[i][j][k][] + dp[i - ][j][k][]) % mod;
dp[i][j][k][] = (dp[i][j][k][] + dp[i - ][j][k][]) % mod;
}
}
}
long long ans = ;
for(int i = ; i <= s; i ++)
ans = (ans + dp[n][i][][]) % mod;
printf("%lld\n", ans * 4LL % mod); }
return ;
}

To My Girlfriend (DP)的更多相关文章

  1. hdu 5800 To My Girlfriend + dp

    传送门:hdu 5800 To My Girlfriend 题意:给定n个物品,其中i,j必选,l,m必不选,问组成体积为s的方法一共有多少种 思路:定义dp[i][j][s1][s2],表示前i种物 ...

  2. hdu5800 To My Girlfriend dp 需要比较扎实的dp基础。

    To My Girlfriend Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. HDU5800 To My Girlfriend(DP)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5800 Description Dear Guo I never forget the mom ...

  4. HDU5800 To My Girlfriend 背包计数dp

    分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j 其中s1个物品时必选,s2物品必不选的方案数 那么转移的时候可以考虑,第i个物品是可选可可不选的 dp[i ...

  5. HDU 5800 To My Girlfriend(单调DP)

    [题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=5800 [题目大意] 给出一个容量上限s,f[i][j][k][l][m]表示k和l两个物品不能选,i ...

  6. 2016暑假多校联合---To My Girlfriend

    2016暑假多校联合---To My Girlfriend Problem Description Dear Guo I never forget the moment I met with you. ...

  7. POJ3211 Washing Clothes[DP 分解 01背包可行性]

    Washing Clothes Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 9707   Accepted: 3114 ...

  8. HDU 5800 (DP)

    Problem To My Girlfriend (HDU 5800) 题目大意 给定一个由n个元素组成的序列,和s (n<=1000,s<=1000) 求 :   f (i,j,k,l, ...

  9. HDU 5800 To My Girlfriend 背包

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5800 To My Girlfriend Time Limit: 2000/2000 MS (Java ...

随机推荐

  1. windows上react-native run-android时Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED报错

    报错如图 解决 在C:\Users\{用户名}\.gradle\wrapper\dists路径下,删除所有文件夹,重新run-android ps:网上搜了说是说是java解压缩编码格式问题什么的,感 ...

  2. springboot 使用 swagger2

    段时间,同事分享了一下 swagger-ui,于是自己尝试了一下.大致的使用过程这里记录一下: 1.添加依赖 <!--swagger-ui--><dependency> < ...

  3. Codechef August Challenge 2018 : Lonely Cycles

    传送门 几波树形dp就行了. #include<cstdio> #include<cstring> #include<algorithm> #define MN 5 ...

  4. Linux下查找某一文件常用的方式

    当我们需要在ubuntu中找到之前的某一个文件,该用什么方式呢?用以下命令你就可以快速定位: find / -name "pycharm.sh" 用find查找这个命令,确定查找范 ...

  5. day25:接口类和抽象类

    1,接口类和抽象类知识背景:一开始在程序界是没有这些概念的,后来就流行了一种语言叫做JAVA,JAVA是一种典型的纯面向对象的语言,JAVA写的程序都是非常适用于更庞大的项目,很多程序员就总结出了一些 ...

  6. js canvas游戏初级demo-躲避障碍物

    在线演示地址 http://200ok.fun:3100/html/game_demo.html 继上次js canvas游戏初级demo-上下左右移动(https://www.cnblogs.com ...

  7. 在Fastreport里使用的CRC函数

    如标题, 是在Fastreport的脚本里运行的CRC计算函数, 包括CRC-16/CRC-32 基本是从网上找的代码, 然后改出来的 至于为什么要在FR的脚本里运行....呵呵 不要在意这些细节(找 ...

  8. laradock

    配置xdebug:http://m.php.cn/article/407434.html

  9. SQL的几种连接:内连接、外连接(左连接、右连接、全连接)

    表结构见前面博客 1.内连接 1.1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列. 三种写法: select * from t ...

  10. MySQL DATE_FORMAT函数使用

    DATE_FORMAT函数 一.定义和用法 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据. 二.语法 DATE_FORMAT(date,format)date 参数是合法的日期. ...