To My Girlfriend HDU
来源:互联网 发布:seo sem是什么工作 编辑:程序博客网 时间:2024/05/21 01:53
那个式子可以想成有两个物品必拿,有两个物品必不拿,最后体积小于等于m的方案数
也是同样想到了n^3的dp,必然会T,走进死沟,看了题解,才想到...
不要考虑太多,对每个物品,有四种拿的状态,拿,必定拿,不拿,必定不拿
这样就裸的转移就可以了
#include<bits/stdc++.h>using namespace std;int a[1005];long long dp[2][1005][3][3];const int mo=1e9+7;int main(){int T;cin>>T;while(T--){int n,s,i,j,k1,k2,now,pre;cin>>n>>s;for(i=0;i<n;i++)scanf("%d",&a[i]);memset(dp,0,sizeof(dp));dp[0][0][0][0]=1;now=1,pre=0;for(i=0;i<n;i++){memset(dp[now],0,sizeof(dp[now]));for(j=s;j>=0;j--){for(k1=0;k1<=2;k1++){for(k2=0;k2<=2;k2++){dp[now][j][k1][k2]=(dp[now][j][k1][k2]+dp[pre][j][k1][k2])%mo;if(k2)dp[now][j][k1][k2]=(dp[now][j][k1][k2]+dp[pre][j][k1][k2-1])%mo;}}if(j>=a[i]){for(k1=0;k1<=2;k1++){for(k2=0;k2<=2;k2++){dp[now][j][k1][k2]=(dp[now][j][k1][k2]+dp[pre][j-a[i]][k1][k2])%mo;if(k1)dp[now][j][k1][k2]=(dp[now][j][k1][k2]+dp[pre][j-a[i]][k1-1][k2])%mo;}}}}swap(now,pre);}long long ans=0;for(i=1;i<=s;i++)ans=(ans+dp[pre][i][2][2])%mo;cout<<ans*4%mo<<endl;}return 0;}
阅读全文
0 0
- To My Girlfriend HDU
- HDU 5800 To My Girlfriend
- hdu 5800 To My Girlfriend
- Problem To My Girlfriend (HDU 5800)
- HDU-5800-To My Girlfriend-DP
- HDU 5800 To My Girlfriend (动态规划)
- hdu 5800 To My Girlfriend (dp)
- HDU 5800 To My Girlfriend(dp)
- HDU 5800 To My Girlfriend(dp)
- HDU 5800 To My Girlfriend 【DP】
- HDU 5800 To My Girlfriend 【DP】
- HDU 5800 To My Girlfriend【动态规划】
- HDU 5800 To My Girlfriend(DP)
- HDU5800-To My Girlfriend
- [HDU 5800] To My Girlfriend (计数DP)
- hdu 5800 To My Girlfriend(背包变形)
- HDU 5800 - To My Girlfriend-四维DP
- HDU 5800 To My Girlfriend(计数DP)
- Kubernetes中controller-manager源码分析--启动流程
- day01-html入门
- 650. 2 Keys Keyboard
- JAVA字符串池问题/String对象创建问题
- 4.I/O
- To My Girlfriend HDU
- Spring DI依赖注入setter,构造,注解,三种依赖方式的总结
- CCF-CSP-火车购票
- Hive数据库操作
- 基数排序
- HDU
- MYSQL 左连 右连 内连等笔记(附带一张很棒的区别图)
- C# 备份、还原、拷贝远程文件夹
- 判断集合是否包含元素list.contains(Object obj)