题目意思

有六种不同的石子,权值为\(1\)~\(6\),给出六种石子的数量,求能否将石子分成权值相等的两份.

解析

这题可以直接用多重背包写,

因为仔细想想,

能够平均分成两份,

也就是能将一部分石子拼成总权值的二分之一.

那么,直接用可行性DP写就行了.

(对于可行性DP请自行上百度吧qwq(因为这又是另一个故事了)

上代码吧:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
} int a[7],tot=0;
int f[150001],u[150001]; int main(){
while(1){
int sum=0;
for(int i=1;i<=6;i++) a[i]=read(),sum+=a[i]*i;
if(!sum) break;
printf("Collection #%d:\n",++tot);
if(sum%2) {puts("Can't be divided.");puts("");continue;}
memset(f,0,sizeof(f));f[0]=1;
for(int i=1;i<=6;i++){
for(int j=0;j<=sum;j++) u[j]=0;
for(int j=i;j<=sum;j++){
if(!f[j]&&f[j-i]&&u[j-i]<a[i]){
f[j]=1;u[j]=u[j-i]+1;
}
}
}
if(f[sum>>1]) puts("Can be divided.");
else puts("Can't be divided.");
puts("");
}
return 0;
}

最新文章

  1. ubuntu声音系统
  2. ubuntu-docker-consul-swarm-shipyard-portainer
  3. js 获取时间比较全,留备用(zhuan)
  4. JLOI2010 冠军调查 最小割
  5. I/O系统,多线程、图形用户界面编程
  6. hdu 5112 A Curious Matt
  7. web页面浮动回到顶部功能和浮动广告
  8. VS2008编程软件过期的问题,过期弹出须要升级窗体的解决的方法
  9. HDU 2457 DNA repair (AC自动机+DP)
  10. linux文件系统详解
  11. Maven干货
  12. POJ3258-River Hopscotch-二分
  13. sql0001
  14. Python虚拟环境笔记
  15. 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维
  16. 主成分分析PCA(Principal Component Analysis)在sklearn中的应用及部分源码分析
  17. 标签无效 &quot;/zabbix_export/date&quot;: &quot;YYYY-MM-DDThh:mm:ssZ&quot; 预计。
  18. OSGI动态加载删除Service bundle
  19. NOI.AC 20181103 题解
  20. CentOS环境变量配置并生效

热门文章

  1. DAO语句如何定义属性类型
  2. 小记--------spark的两种提交模式
  3. ARC100E. Or Plus Max
  4. Linux系列之ftp
  5. 南昌网络赛C.Angry FFF Party
  6. 19牛客暑期多校 round2 F dfs
  7. union和in哪个效率高
  8. 百度音乐接口api
  9. MVC4学习要点记二
  10. var正在声明变量