vijos 猫狗大战
来源:互联网 发布:免费手机炒股软件排行 编辑:程序博客网 时间:2024/04/29 18:25
倒不是这道题多难
记下来作为警告。。。
这道题是个普通背包问题
我一开始相差了
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define N 210#define INF 987654321using namespace std;int main() { int n; while(scanf("%d", &n) != EOF) { int a[N], sum = 0, dp[8100]; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); sum += a[i]; } for(int i = 0; i < n; i++) { for(int j = sum / 2; j >= a[i]; j--) dp[j] = max(dp[j], dp[j - a[i]] + a[i]); } if(dp[sum / 2] > sum - dp[sum / 2]) printf("%d %d\n", sum - dp[sum / 2], dp[sum / 2]); else printf("%d %d\n", dp[sum / 2], sum - dp[sum / 2]); }}
这忽略了一个条件 选取个数必须 n / 2 or n / 2 + 1
so ...
二维背包下 f[i][j] 前i个兵能否达到j血
最后再直接搜下f[n/2][i] i <- sum / 2 to 0
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#define N 210#define INF 987654321using namespace std;int dp[N][8100];int main() { int n; while(scanf("%d", &n) != EOF) { int a[N], sum = 0, ans = 0; memset(dp, 0, sizeof(dp)); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); sum += a[i]; //dp[i][0] = 1; } dp[0][0] = 1; for(int i = 1; i <= n; i++) { for(int j = n / 2; j >= 1; j--) for(int k = 8000; k >= 0; k--) if(dp[j - 1][k]) dp[j][k + a[i]] = 1; } for(int i = sum / 2; i >= 0; i--) if(dp[n / 2][i]) { ans = i; break; } if(ans > sum - ans) printf("%d %d\n", sum - ans, ans); else printf("%d %d\n", ans, sum - ans); }}
令我费解的是 dp[i][0] 存在就是错的 这是为何 后来突然想起。。 影响了前面的判断。。。
归根结底原因还是没深刻理解清楚优化的原理
- vijos 猫狗大战
- Vijos P1153 - 猫狗大战
- Vijos P1153 猫狗大战
- VIJOS P1153 猫狗大战
- VIJOS-P1153 猫狗大战 dp 贪心
- Vijos P1153 猫狗大战(动态规划,背包)
- dp遍历所有状态 vijos 1037 搭建双塔 1059 积木城堡 1153 猫狗大战
- Vijos P1228 拯救世界-星际大战
- Vijos P1228 拯救世界-星际大战
- 猫狗大战
- 洛谷 P1489 猫狗大战
- 洛谷1489 猫狗大战
- 猫狗大战遇到问题
- 【vijos】【二分图带权匹配】拯救世界-星际大战
- [keras]猫狗大战的总结
- Tensorflow学习——猫狗大战
- 360大战搜狗
- 人狗大战
- IOS 整体框架类图值得收藏
- Android技术积累:图片异步加载
- 脱壳工具大汇总
- oracle error 6 initializing sql*plus (设置ORACLE_HOME环境变量)
- Linux下华为E220模块调试问题小记
- vijos 猫狗大战
- Oracle笔记
- hadoop 大数据开发1---配置hadoop分布式
- 你的Android应用定制属于你的BaseActivity
- 无法连接到 PC-201305301540。与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。
- 简单面试题::字符串按单词反转
- hdoj_2031 进制转换
- C/C++运算符优先级
- java 获取服务器信息