解题报告:HDU_6042 Journey with Knapsack 生成函数
来源:互联网 发布:管家婆数据导入 编辑:程序博客网 时间:2024/06/13 13:02
题目链接
题意:
你有一个容量为2*n的背包,现在有n种食物,第i种事物的体积为i,数目为ai个。还有m种武器,每种武器体积为bi。
现在要求背包里装一个武器,任意食物的方案数。
思路:
官方给的就很详细了Orz......
不懂五边形数定理的同学可以看维基的介绍:五边形数定理、分割数
代码:
#include<bits/stdc++.h>const int N = 1e5+10;const int mod = 1e9+7;using namespace std;int n=1e5,m,l;int arr[N],dp[N],tmp[N];void init(){ arr[0] = 1; for(int i=1,j=1;i<=1000;i++){ tmp[i] = j * ( 3 * j - 1 ) / 2; if(j>0)j=-j; else j=-j+1; } for(int i=1;i<=n;i++){ for(int j=1,k=1;i>=tmp[j];j++,k++){ if(k==5)k-=4; arr[i] += (k<=2?1:-1) * arr[i-tmp[j]]; if(arr[i]>=mod)arr[i]-=mod; else if(arr[i]<0)arr[i]+=mod; } }}int main(){ init(); int cas = 0 , x ; while(scanf("%d%d",&n,&m)==2){ l = n<<1; for(int i=0;i<=l;i++)dp[i] = arr[i]; for(int i=1;i<=n;i++){ scanf("%d",&x); long long t = 1LL * (x+1) * i; if(t<=l){ for(int j=l;j>=t;j--){ dp[j] -= dp[j-t]; if(dp[j]<0)dp[j]+=mod; } } } for(int i=1,j=n+1,sum=dp[0];i<=n;sum+=dp[i++],j++){ if(sum>=mod)sum-=mod; dp[j] -= sum; if(dp[j]<0)dp[j]+=mod; }int ans = 0; while(m--){ scanf("%d",&x); ans += dp[l-x]; if(ans>=mod)ans-=mod; }printf("Case #%d: %d\n",++cas,ans); }return 0;}
阅读全文
0 0
- 解题报告:HDU_6042 Journey with Knapsack 生成函数
- HDU 6042 Journey with Knapsack(生成函数)
- POJ_2488 A Knight's Journey解题报告
- A Knight's Journey 解题报告
- POJ-2488 A Knight's Journey 解题报告
- 【POJ2488】 A knight's Journey 解题报告 测试数据+代码+思路
- A Knight's Journey解题报告(陈小宾)
- poj 2488 A Knight's Journey 解题报告 DFS
- POJ2488 骑士游历 A Knight's Journey 解题报告
- POJ - 2488 A Knight's Journey解题报告
- URAL 1382 Game with Cards 解题报告
- [LeetCode]Container With Most Water, 解题报告
- Leetcode Container With Most Water 解题报告
- POJ3311 Hie with the Pie解题报告
- 【LeetCode】Container With Most Water 解题报告
- LeetCode解题报告--Container With Most Water
- 【LeetCode】Container With Most Water 解题报告
- Copy List with Random Pointer解题报告
- Java的数组知识点
- 【南阳OJ 14】 会场安排问题(贪心)
- 安卓权限了解
- datagrid 多选分页保留选中项
- 数据挖掘和机器学习中距离和相似度公式
- 解题报告:HDU_6042 Journey with Knapsack 生成函数
- Storm集群的搭建
- 2017多校第一场 HDU 6038 Function 循环节,脑洞,大思维题
- 2017第一次多校联合 1006Function
- PAT乙级 1052. 卖个萌 (20)--格式化读取,vector的使用
- [PAT乙级]1046. 划拳(15)
- 10562
- layui框架详细分析系列之框架主体组织结构
- Eclipse中项目切换SVN路径