【动态规划】【RQNOJ】马棚问题
2010-07-14 11:54
176 查看
题目描述
每天,小明和他的马外出,然后他们一边跑一边玩耍。当他们结束的时候,必须带所有的马返回马棚,小明有K个马棚。他把他的马排成一排然后跟随它走向马棚,因为他们非常疲劳,小明不想让他的马做过多的移动。因此他想了一个办法:将马按照顺序放在马棚中,后面的马放的马棚的序号不会大于前面的马放的马棚的序号。而且,他不想他的K个马棚中任何一个空置,也不想任何一匹马在外面。已知共有黑、白两种马,而且它们相处得并不十分融洽。如果有i个白马和j个黑马在一个马棚中,那么这个马棚的不愉快系数将是i*j。所有k个马棚不愉快系数的和就是系数总和。确定一种方法把n匹马放入k个马棚,使得系数总和最小。输入格式
输入:在第一行有两个数字:n(1≤n≤500)和k(1≤k≤n)。在接下来的n行是n个数。在这些行中的第i行代表队列中的第i匹马的颜色:1意味着马是黑色的,0意味着马是白色的。输出格式
输出:只输出一个单一的数字,代表系数总和可能达到的最小值。样例输入
#include<stdio.h> #include<iostream> using namespace std; int a[501],f[501][501],s[501][501]; int n,m; int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;++i) scanf("%d",&a[i]); for (int i=1;i<=m;++i) for (int j=1;j<=n;++j) f[i][j]=10000; for (int i=1;i<=n;++i) { for (int j=1;j<=n;++j) { int x=0; for (int k=i;k<=j;++k) x+=a[k]; s[i][j]=(j-i+1-x)*x; } f[1][i]=s[1][i]; } for (int l=2;l<=m;++l) for (int j=l;j<=n;++j) for (int k=l-1;k<=j;++k) f[l][j]=min(f[l][j],f[l-1][k]+s[k+1][j]); printf("%d/n",f[m] ); return 0; }
相关文章推荐
- 【解题报告】[动态规划] RQNOJ - PID273 / 马棚问题
- 【动态规划】【RQNOJ】装箱问题
- RQNOJ 273 马棚问题
- rqnoj-273-马棚问题-dp
- 一中OJ #1453 马棚问题 | 动态规划 序列分组DP | 解题报告
- 【动态规划】【RQNOJ】购物问题
- 【解题报告】[动态规划] RQNOJ - PID105 / 核电站问题
- RQNOJ PID273 马棚问题
- RQNOJ 题目273 马棚问题(DP)
- 【动态规划】牛顿爬楼梯问题
- java 动态规划判断股票最大盈利问题
- 自顶向下动态规划解决最长公共子序列(LCS)问题
- 动态规划——B 最大高度问题
- 【算法数据结构Java实现】Java实现动态规划(背包问题)
- 算法导论16.2-2--动态规划(0-1背包问题)
- 动态规划——贪心算法——活动选择问题
- 0020算法笔记——【动态规划】最优二叉搜索树问题
- 0013算法笔记——【动态规划】最大子段和问题,最大子矩阵和问题,最大m子段和问题
- 使用动态规划求解字符串问题
- 动态规划之背包问题