TYVJP1114
来源:互联网 发布:出让股份分配怎么算法 编辑:程序博客网 时间:2024/05/16 09:59
不同步其他博客以前的东西了,从现在开始到以后同步这个好了……
搭建双塔,貌似是非常有名的一道题,OI的
dp[i][j]表示使用前i个水晶块的时候,两座塔的误差为j时两座塔共有的最高高度,对于第i个木块,有三种情况,第一种不放,第二种放在其中挨塔上,此时更新误差值以及共有的最高高度值,第三种情况放在高塔上,此时仅仅更新误差值。
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>using namespace std;#define MAX 2500#define MIN -10000int i, n, j, sum[150], a[150], dp[150][MAX], k;int max(int a, int b){if (a > b) return a;else return b;}int main(){scanf("%d", &n);for (i = 1; i <= n; i++){scanf("%d", &a[i]);sum[i] = sum[i - 1] + a[i];}for (i = 0; i <= n; i++) for (j = 0; j >= 2000; j++)dp[i][j] = -10000;dp[0][0] = 0;for (i = 1; i <= n; i++) for (j = sum[i]; j >= 0; j--) { dp[i][j] = dp[i - 1][j]; if (a[i] >= j)dp[i][j] = max(dp[i][j], max(dp[i - 1][a[i] - j] + j, dp[i - 1][a[i] + j])); else dp[i][j] = max(dp[i][j], max(dp[i - 1][j - a[i]] + a[i], dp[i - 1][a[i] + j])); }k = -1;for (i = 1; i <= n; i++) if (dp[i][0] > k) k = dp[i][0];if (k > 0) printf("%d\n", k);else printf("Impossible\n");return 0;}
PS:千万别用cin和cout,会超时……
- TYVJP1114
- 图结构系列—基于邻接表的图实现
- (一)工作总结——当你遇到困难时,心中总会有一个奇怪的念头……
- UITableViewCell的重绘机制 .
- Shell中的 "" 与 '' 的用法
- Why do Java programmers wear glasses?
- TYVJP1114
- PHP-分词- paoding基于Lucene的最流行的分词法
- javascript笔记
- android 休眠与唤醒
- systemd 管理服务
- Windows Socket编程TCP范例之二(select)
- PTmalloc hacking
- 更改Ubuntu 的登录背景图片
- Linux 下查看某一个程序所使用的内存