程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Ural 1167 Bicolored Horses (DP)

Ural 1167 Bicolored Horses (DP)

編輯:C++入門知識

Ural 1167 Bicolored Horses (DP)


題目地址:Ural 1167

感覺這題的思路類似於背包的做法。。

先預處理出來每個馬與之前所有的馬的0的數量和1的數量,用數組a[0][i]和a[1][i]來表示。

然後再用數組dp[i][j]來表示當前第i個馬槽最右端為第j個馬時的最小值。

dp的時候先枚舉馬槽,再用n*n枚舉當前的馬槽要選用的馬的區間。這樣總時間復雜度是O(n*n*k)。

代碼如下:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
const int INF=0x3f3f3f3f;
#define LL long long
int a[3][600], dp[600][600], c[600];
int main()
{
    int n, k, i, j, x, h;
    c[0]=0;
    scanf("%d%d",&n,&k);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&c[i]);
    }
    a[0][0]=0;
    a[1][0]=0;
    for(i=1; i<=n; i++)
    {
        a[0][i]=c[i]==0?a[0][i-1]+1:a[0][i-1];
        a[1][i]=c[i]==1?a[1][i-1]+1:a[1][i-1];
    }
    memset(dp,INF,sizeof(dp));
    dp[0][0]=0;
    for(i=1;i<=k;i++)
    {
        for(j=1;j<=n;j++)
        {
            for(h=0;h

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved