Problem 1463 - Come to a spring outing
2014-05-12 17:57
381 查看
http://acm.whu.edu.cn/land/problem/detail?problem_id=1463
背包,三位的背包,但是可以压缩到二维,假设所有的东西能被三个背包装完,第1 个包装了j , 第二个包装了 k, 第三个包装的就固定了,sum - j - k。
背包,三位的背包,但是可以压缩到二维,假设所有的东西能被三个背包装完,第1 个包装了j , 第二个包装了 k, 第三个包装的就固定了,sum - j - k。
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; int n,m,sum; int a[40],dp[410][410]; bool solve() { int i ,j,k; for(i = 1; i <= n; i++) { for(j = m; j>= 0; j--) { for(k = m; k >= 0; k--) { if(j >= a[i] && dp[j-a[i] ][k] + a[i] > dp[j][k]) dp[j][k] = dp[j-a[i] ][k] + a[i]; if(k >= a[i] && dp[j][k-a[i] ] +a[i] > dp[j][k]) dp[j][k] = dp[j][k-a[i] ] + a[i]; if(sum - dp[j][k] <= m) return true; } } } return false; } int main() { int t, num = 0; while(cin>>t) { while(t--) { scanf("%d%d",&n,&m); memset(dp,0,sizeof(dp)); int i ,flag = 1; sum = 0; for(i = 1; i <= n; i++) { scanf("%d",&a[i]); sum += a[i]; if(a[i] > m) flag = 0; } if(flag && solve()) printf("Case %d: Yes\n",++num); else printf("Case %d: No\n",++num); } } return 0; }
相关文章推荐
- Java 之 文件读写及性能比较总结
- Eclipse 插件开发 向Console控制台输出信息
- [Java][activiti]activiti5.13 框架 数据库表结构说明
- spring 3.1 Validator 校验机制解析
- Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
- spring security学习- 一个实际的例子
- Hibernate Annotation介绍
- Eclipse中修改SVN用户名和密码方法
- java:访问权限
- Java线程:线程栈模型与线程的变量
- [Java][activiti]同步或者重构activiti identify用户数据的方法
- JAVA 批处理 调整、压缩png jpg图片大小
- Java调用net的webservice故障排除实战分享(转)
- javaswing
- java设计模式----观察者模式
- Maven报错“未结束的字符串字面值” “需要为 class、interface 或 enum”等
- java将html导出成word(利用的poi包导出)
- MyEclipse SVN插件冲突导致不能使用解决办法
- [算法]游戏'数读’的基本解法 JAVA版。
- java项目加入天气、尾号限行小功能