您的位置:首页 > 其它

RQNOJ 题目273 马棚问题(DP)

2015-09-20 18:00 246 查看
PID273
/ 马棚问题☆

提交你的代码

查看讨论和题解



5秒前

我的状态

已通过

2015-09-20 17:51:21

运行耗时:1849 ms

运行内存:13252 KB

查看最后一次评测记录





质量 7

题目评价

质量

7

★★★★★
★★★★☆
★★★☆☆
★★☆☆☆
★☆☆☆☆

66.6%

0%

0%

0%

33.3%













通过人数 534 / 1087

通过统计

最短耗时

200ms

最小内存

0KB



动态规划

题目标签

类型

动态规划

题目描述

每天,小明和他的马外出,然后他们一边跑一边玩耍。当他们结束的时候,必须带所有的马返回马棚,小明有K个马棚。他把他的马排成一排然后跟随它走向马棚,因为他们非常疲劳,小明不想让他的马做过多的移动。因此他想了一个办法:将马按照顺序放在马棚中,后面的马放的马棚的序号不会大于前面的马放的马棚的序号。而且,他不想他的K个马棚中任何一个空置,也不想任何一匹马在外面。已知共有黑、白两种马,而且它们相处得并不十分融洽。如果有i个白马和j个黑马在一个马棚中,那么这个马棚的不愉快系数将是i*j。所有k个马棚不愉快系数的和就是系数总和。确定一种方法把n匹马放入k个马棚,使得系数总和最小。

输入格式

输入:在第一行有两个数字:n(1≤n≤500)和k(1≤k≤n)。在接下来的n行是n个数。在这些行中的第i行代表队列中的第i匹马的颜色:1意味着马是黑色的,0意味着马是白色的。

输出格式

输出:只输出一个单一的数字,代表系数总和可能达到的最小值。

样例输入样例输出

提交题目

C++ Language

ac代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define INF 0x3f3f3f3f
int dp[505][505];
int b[505],w[505];
/*int fun(int x,int y)
{
return (b[y]-b[x])*(w[y]-w[x]);
}*/
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
//	for()
b[0]=w[0]=0;
int i,j,k;
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
dp[i][j]=INF;
dp[0][0]=0;
for(i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if(x)
{
b[i]=b[i-1]+1;
w[i]=w[i-1];
}
else
{
w[i]=w[i-1]+1;
b[i]=b[i-1];
}
dp[i][1]=b[i]*w[i];
}
for(j=2;j<=m;j++)
{
for(i=j;i<=n;i++)
{
for(k=j-1;k<=i-1;k++)
{
int temp1,temp2;
temp1=b[i]-b[k];
temp2=w[i]-w[k];
dp[i][j]=min(dp[i][j],dp[k][j-1]+temp1*temp2);
}
}
}
printf("%d\n",dp
[m]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: