码迷,mamicode.com
首页 > 其他好文 > 详细

DP | Luogu P1466 集合 Subset Sums

时间:2019-09-26 14:49:17      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:link   display   soft   for   spl   cli   ++   www   nan   

题面:P1466 集合 Subset Sums

题解:

dp
sum=N*(N+1)/2;
模型转化为求选若干个数,填满sum/2的空间的方案数,就是背包啦
显然如果sum%2!=0是没有答案的,就特判掉
F[i][j]表示对于前i个数,和为j的方案数
F[0][0]=1;
F[i][j]+=F[i-1][j-i] (j>=i)
转化为
for(int i=1;i<=N;i++)
for(int j=sum/2;j>=i;j--)
F[j]+=F[j-i];
答案是F[sum/2]/2,因为真实题目要求是划分嘛,然后你写成选出了你又把它放A又放B当然得/2了。。
反正就是这样

代码:

技术图片
 1 #include<cstdio>
 2 #define ll long long
 3 using namespace std;
 4 const int maxn=45,maxsum=maxn*(1+maxn)/2;
 5 int N,sum,hf;
 6 ll F[maxsum/2];
 7 int main(){
 8     scanf("%d",&N);
 9     sum=N*(N+1)/2;
10     if(sum%2){
11         printf("0\n");
12         return 0;
13     }
14     hf=sum/2;
15     F[0]=1;
16     for(int i=1;i<=N;i++)
17         for(int j=hf;j>=i;j--)
18             F[j]+=F[j-i];
19     printf("%lld\n",F[hf]/2);
20     return 0;
21 }
View Code

 


By:AlenaNuna

 

DP | Luogu P1466 集合 Subset Sums

标签:link   display   soft   for   spl   cli   ++   www   nan   

原文地址:https://www.cnblogs.com/AlenaNuna/p/11590537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!