http://acm.hdu.edu.cn/showproblem.php?pid=5800

题意:

给定一个由n个元素组成的序列,和s (n<=1000,s<=1000)

  求 :

题解的做法是f[i][j][s1][s2]表示前i个数总和为j必选s1个必不选s2个的方案数,这样是O(n*s*4)的。

  对于每一个数,有4种选法:选,不选,必选,必不选,然后转移就好了。

  答案就是sigma(f[n][i][2][2]) ,i∈[0,s]。

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <cstdio>
 6 #include <vector>
 7 #include <ctime>
 8 #include <queue>
 9 #include <list>
10 #include <set>
11 #include <map>
12 using namespace std;
13 #define mod 1000000007
14 typedef long long LL;
15
16 int dp[1010][1010][4][4];
17 int a[1010];
18 void Add(int &x, int y)
19 {
20     x = (x + y) % mod;
21 }
22 int main()
23 {
24     int n, s, t;
25     scanf("%d", &t);
26     while(t--)
27     {
28         scanf("%d %d", &n, &s);
29         for(int i = 1; i <= n; i++)
30             scanf("%d", a + i);
31         memset(dp, 0, sizeof(dp));
32         dp[0][0][0][0] = 1;
33         for(int i = 1; i <= n; i++)
34         {
35             for(int j = 0; j <= s; j++)
36             {
37                 for(int k = 0; k <= 2; k++)
38                 {
39                     for(int l = 0; l <= 2; l++)
40                     {
41                         Add(dp[i][j][k][l], dp[i - 1][j][k][l]);
42                         if(j >= a[i])
43                             Add(dp[i][j][k][l], dp[i - 1][j - a[i]][k][l]);
44                         if(k > 0 && j >= a[i])
45                             Add(dp[i][j][k][l], dp[i - 1][j - a[i]][k - 1][l]);
46                         if(l > 0)
47                             Add(dp[i][j][k][l], dp[i - 1][j][k][l - 1]);
48                     }
49                 }
50             }
51         }
52         LL res = 0;
53         for(int i = 0; i <= s; i++)
54             res += dp[n][i][2][2];
55         printf("%lld\n", res * 4 % mod);
56     }
57     return 0;
58 }

View Code

转载于:https://www.cnblogs.com/luomi/p/5741985.html

最新文章

  1. 张钹院士:制约人工智能发展的最大困难是什么?
  2. 定时器回调函数怎么写_ESP8266_04管脚控制与软件定时器
  3. ssm项目整合log4j日志
  4. ASP.NET中网站访问量统计方法
  5. PHP增删查改性能优化
  6. 小括号教学设计导入_【教资面试】语文政治历史地理教学设计答题技巧!
  7. gitlab ProjectMembers
  8. SQL Server数据表提示NOLOCK和READPAST
  9. Oracle 初始化参数性能视图
  10. 飞行管理计算机组成,飞行模拟中飞行管理计算机系统CDU组件设计与仿真
  11. 浅谈常见浏览器缓存方法(前端缓存)
  12. 意识与本我、自我、超我理论
  13. Waterfall Header Bidding机制
  14. 量子力学奇妙之旅-算符和电子自旋
  15. android 前后同时预览_GitHub 上优质项目整理,不只 Android
  16. PHP入门《PHP程序设计案例教程》——PHP网站开发
  17. 大牛deep learning入门教程
  18. 用python画小猪佩奇代码_使用Canvas画小猪佩奇
  19. 屏保问题(即背光灯的关闭)
  20. 使用CLB部署HTTPS业务

热门文章

  1. js两个日期对比大小
  2. Asp.Net Mvc4分页,扩展HtmlHelper类
  3. 定位Oops的具体代码行[zt]
  4. eclipse svn使用小记
  5. android support-v4、v7、v13
  6. 又被腾讯刷屏!果然是印钞机.....酸哭了...
  7. 查询提升 200 倍,ClickHouse 你值得拥有!
  8. 今天我们开通知识星球了~
  9. 你不专业并且自以为是,所以被坑
  10. 宁愿月薪1万招新人,却不愿给月薪5千的老员工涨薪