程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu-4570-Multi-bit Trie-簡單區間DP

hdu-4570-Multi-bit Trie-簡單區間DP

編輯:C++入門知識

有的時候,你看不懂題,你就A不了題(這不是廢話麼。。。)

這個題實在是太惡心了,做法很簡單,題意很難懂!!

題意:

這題題意確實有點難懂,起碼對於我這個英語渣渣來說是這樣,於是去別人的博客看了下題目意思,歸納起來如下:

給出一個長度為n的數列,將其分成若干段,要求\最小,其中ai是每一段數列的第一項,bi是每一段的長度,l為將數列分成l段。

比如樣例:n=7,A={1 2 4 4 5 4 3},將其分成1 2 4| 4 5| 4| 3,則其所用空間為1*2^3+4*2^2+4*2^1+3*2^1=38,而如果分成1 2| 4 4 5| 4 3,則其所用空間為1*2^2+4*2^3+4*2^2=52,比38大。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define maxn 110
#define LL __int64
LL mp[maxn][maxn];
LL a[maxn];
LL dos(LL x,LL y)
{
    if(mp[x][y])return mp[x][y];
    LL minn=a[x];
    for(LL i=x;i<=y;i++)minn=minn*2;
    if(y-x+1>20)
    {
        minn=0;
        for(LL i=x;i<=y;i++)minn+=a[i]*2;
    }
    for(LL i=x;i

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