博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DP | Luogu P1466 集合 Subset Sums
阅读量:5242 次
发布时间:2019-06-14

本文共 805 字,大约阅读时间需要 2 分钟。

题面:

题解:

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
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

 

转载于:https://www.cnblogs.com/AlenaNuna/p/11590537.html

你可能感兴趣的文章
ZipFile解压文件不改变压缩包内文件修改日期的方法
查看>>
妙味——任意值变化的运动框架
查看>>
31种选择器的应用
查看>>
fck用法总结 待续。。。
查看>>
拓展训练总结
查看>>
HDU 1007 Quoit Design竟然要分治
查看>>
简单的SQL语句
查看>>
linux grep 搜索查找
查看>>
指针实验报告
查看>>
for循环语句
查看>>
python-加密
查看>>
实用小命令汇总(个人使用)
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
堆 栈
查看>>
Kth Smallest Element in Unsorted Array
查看>>
vue项目中使用百度统计
查看>>
第 十一 次作业
查看>>
利用PHP SOAP实现WEB SERVICE[转载]
查看>>
[leetcode DP]120. Triangle
查看>>