【USACO 2.2】Subset Sums (DP)
2016-10-04 03:24
302 查看
N (1 <= N <= 39),问有多少种把1到N划分为两个集合的方法使得两个集合的和相等。
如果总和为奇数,那么就是0种划分方案。否则用dp做。
dp[i][j]表示前 i 个数划分到一个集合里,和为j的方法数。
dp[i][j]=dp[i-1][j]+dp[i][j-i]
n 为 39 时,1 到 39 的和为 780,枚举 j 的时候枚举到 s/2,最后输出dp
[s/2]/2。
http://train.usaco.org/usacoprob2?a=z5hb7MFUmsX&S=subset
如果总和为奇数,那么就是0种划分方案。否则用dp做。
dp[i][j]表示前 i 个数划分到一个集合里,和为j的方法数。
dp[i][j]=dp[i-1][j]+dp[i][j-i]
n 为 39 时,1 到 39 的和为 780,枚举 j 的时候枚举到 s/2,最后输出dp
[s/2]/2。
http://train.usaco.org/usacoprob2?a=z5hb7MFUmsX&S=subset
/* TASK: subset LANG: C++ */ #include<bits/stdc++.h> int n; int s,ans; long long dp[100][1000]; int main(){ freopen("subset.in","r",stdin); freopen("subset.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++)s+=i; dp[0][0]=1; if(s%2==0) for(int i=1;i<=n;i++){ for(int j=0;j<=s/2;j++) dp[i][j]+=dp[i-1][j]+(j>=i?dp[i-1][j-i]:0); printf("%lld\n",dp [s/2]/2); }
相关文章推荐
- USACO section 2.2 Subset Sums(DP,背包)
- USACO-Section 2.2 Subset Sums (DP)
- USACO 2.2 Subset Sums dp
- USACO 2.2 Subset Sums (DP动态规划)
- USACO - 2.2 Subset Sums(DP)
- USACO 2.2 Subset Sums(水DP)
- USACO section 2.2 Subset Sums(DP,背包)
- DP USACO 2.2.2 Subset Sums 集合
- USACO 2.2 Subset Sums 集合(subset)
- USACO-Section2.2 Subset Sums [动态规划]
- USACO Section 2.2 Subset Sums - 01背包的思想
- USACO:Subset Sums简单dp
- USACO - Chapter2 Section 2.2 - Subset Sums
- USACO-Section2.2 Subset Sums【动态规划】
- USACO-Section2.2 subset[DP]
- USACO 2.2 Subset Sums (subset)
- [USACO2.2]集合 Subset Sums
- USACO section2.2 Subset Sums题解&代码
- USACO / Subset Sums集合 (DP)
- Subset Sums_usaco2.2.2_dp