http://acm.hdu.edu.cn/showproblem.php?pid=4283

题意:有n个数字,不操作的情况下从左到右按顺序输出,但是可以先让前面的数字进栈,让后面的数字输出,然后栈里的数字再输出。执行完各种操作后,第i个数字输出的代价是w[i] * (i-1)。问如何弄才能使得代价最小,输出。

思路:做了半个下午。好菜啊QAQ。

考虑两种情况:

1、左区间的元素先输出,然后右区间的元素再输出。这个时候方程为 dp[i][j] = dp[i][k] + dp[k+1][j] + sum(k+1,j) * (i-k+1)。

2、左区间的元素进栈,右区间的元素先输出,然后左区间元素倒序输出(因为进了栈顺序反了)。方程为 dp[i][j] = dp[k+1][j] + sum(i,k) * (j-k) + tmp.(tmp是倒序输出的代价)

然后对于这两种情况取优就好了。

都是细节没搞清楚才做好久。

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 105
typedef long long LL;
LL dp[N][N], w[N], pre[N]; int main() {
int t, cas = ;
scanf("%d", &t);
while(t--) {
// char s[2];
// if(cas == 0) scanf("%s", s);
int n; scanf("%d", &n);
memset(dp, 0x3f3f3f3f, sizeof(dp));
for(int i = ; i <= n; i++) scanf("%lld", &w[i]), dp[i][i] = ;
for(int i = ; i <= n; i++) pre[i] = pre[i-] + w[i];
for(int len = ; len < n; len++) {
for(int i = ; i + len <= n; i++) {
int j = i + len;
for(int k = i; k < j; k++) {
// a的情况是前后的区间都不入栈
LL a = dp[i][k] + dp[k+][j] + (pre[j] - pre[k]) * (k + - i);
LL tmp = ;
for(int cnt = k; cnt >= i; cnt--) tmp += w[cnt] * (k - i);
// tmp 求倒着出栈的代价
// b的情况是前面的入栈,让后面的区间直接出来
LL b = dp[k+][j] + (pre[k] - pre[i-]) * (j - k) + tmp;
dp[i][j] = min(dp[i][j], min(a, b));
}
}
}
printf("Case #%d: %lld\n", ++cas, dp[][n]);
}
return ;
}

最新文章

  1. 无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120)的解决方法
  2. Dev 控件问题多少
  3. Linux 进程退出后自动启动
  4. 常用的Java 架包(jar)的用途
  5. Ubuntu安装软件提示”需要安装不能信任的软件包”解决办法
  6. vb6.0如何让窗体跟随鼠标运动
  7. BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路
  8. jQuery插件综合应用(二)文字为主的页面
  9. Balanced Lineup
  10. Qt入门(17)——组装复杂的控件
  11. 纠结的CLI C++与Native C++的交互
  12. Xcode快捷键 (本人总结常用的)
  13. iOS 开发之协议-代理传值
  14. Docker配置镜像加速
  15. [物理学与PDEs]第1章习题14 求解 rot 方程
  16. Converting Recursive Traversal to Iterator
  17. Codeforces 886E Maximum Element 组合数学 + dp
  18. Mac通过type-c接口无法识别移动硬盘
  19. Acperience (英语阅读 + 数学推导)
  20. (转)C#反射使用时注意BindingFlags的用法

热门文章

  1. QuickReport的OnNeedData的触发情况
  2. WPF学习目录
  3. 用MVVM模式开发中遇到的零散问题总结(3)——自制正则表达式万能绑定转换器
  4. Hive-分组之后取前n个
  5. golang1.8 通过plugin方式build so
  6. UWP项目生成错误: 未能使用“CompileXaml”任务的输入参数初始化该任务。“CompileXaml”任务不支持“PlatformXmlDir”参数。请确认该参数存在于此任务中,并且是可设置的公共实例属性。
  7. 小米手机销量暴跌36% 雷军做错了什么?(人的需求是复杂的,而不是仅仅是一个性价比;要做体验价格比,而不是配置价格比)good
  8. WPF 用Main函数方式启动程序
  9. 论文阅读计划2(Deep Joint Rain Detection and Removal from a Single Image)
  10. Tomcat请求过程