動態規劃測試3 test20170406

2021-07-30 05:56:07 字數 4880 閱讀 4041

炸彈bombpasccpp time1s memory256m

戰爭warpasccpp time1s memory256m總結

突然就考試,做完1,2題就開始浪了。於是就第三題打了個暴力…

用emacs之後**縮排似乎就呵呵了…

高老大有乙個n∗

n 的廣場,被均分成n∗

n 個格仔。其中某些格仔種上了樹。

為了維護世界的和平,為了貫徹和平與發展的原則,老大不得不開始操練部下了。部下們必須站在廣場中某沒種上樹個格仔中,而且乙個格仔內不允許有兩個人站著。同時,為了顯得整齊劃一,部下們要維護乙個方陣的陣型,也就是n*n的廣場內的乙個x∗

y 的矩形(該矩形的長和寬必須與廣場的長和寬平行),每個格仔上都必須有乙個部下。現在老大想知道,一次最多操練多少個部下?

輸入檔名為training.in。

輸入第一行兩個正整數n和m,代表廣場的長和寬。

下接乙個n行m列的字元矩陣,若第i行第j列為『0』則代表該格仔上有一顆樹。

輸出檔名為training.out。

輸出一次最多能夠操練的部下個數。

training.in

2 11

11 training.out

4對於80%的資料,n≤

250 ;

對於100%的資料,n≤

1000

。 這道題目就是極大化子矩形的乙個模板吧,所以還好做吧。

這個題目的母題是usaco中的rectbarn,裡面講的很詳細。

解釋一下我這裡f[

i][j

] 表示的是這個點前面1的個數,那麼你應該就看的懂了吧。。。

#include 

#include

#include

using

namespace

std;

#define min(a,b) ((a)<(b)?(a):(b))

#define max(a,b) ((a)>(b)?(a):(b))

const

int size = 1000+10;

int n,ans;

int f[size][size];

char ch[size][size];

int minn,cnt;

inline

int read()

int main() */

for(int i=n;i>=1;i--)

for(int j=1;j<=n;j++)

}printf("%d\n",ans);

return

0;}

高老大又在鼓搗炸彈了,這不,啟動了乙個了。英明英勇的老大又在跟他的部下們表演空手光速拆炸彈了。

炸彈上是乙個圓盤,圓盤上順時針寫著n個數。其實這個炸彈就是要求從中選擇若干個連續的數(注意每個數最多只能選一次)加起來,使得這些數字的和最大,然後輸入這個

最大的和,計時就會停止。現在你被老大要求上台表演,時間是1s,任務就交給你了。

輸入檔名為bomb.in。

輸入第一行包含乙個正整數n,表示數字的個數。

第二行包含n個整數,為所給的數字。

輸出檔名為bomb.out。

輸出包含乙個整數,為最大的可以得到的和。

bomb.in

8 2 -4 6 -1 -4 8 -1 3

bomb.out

14對於30%的資料 1≤

n≤200 ;

對於70%的資料 1≤

n≤10000

; 對於100%的資料 1≤

n≤100000

, 答案在longint範圍內。

這個題目可以很明顯的發現就是求最大連續子串行的題目

然後我們可以一般輕鬆的求出在非環上的最大連續子串行,o(

n)出界

然後就是處理此時在環上的情況了。。。

我們將乙個方案分成兩部分,一部分從 1 開始遞增,一部分從 n 開始遞減。

然後用dp就可以求出末端不超過 i 且從 1 或 n 出發的最大連續子串行。

然後就沒有然後了…

#include 

#include

#include

#include

using

namespace

std;

typedef

int ll;

#define min(a,b) ((a)<(b)?(a):(b))

#define max(a,b) ((a)>(b)?(a):(b))

const

int size = 200000+10;

ll n,ans;

ll a[size],f[size];

inline ll read()

inline ll erfen(ll l,ll r)

int main()

printf("%d\n",ans);

return

0;}

高老大要打團戰了。他要召集n(n是奇數)個人去組織一場戰爭。現在高老大的手下有t個人,每個人都有乙個戰鬥力值和影響力值。當這n個人的影響力值之和超過m的時候,必然會引起巨大的社會動盪。為了愛與和平,老大明智地決定,不引起巨大的社會動盪。同時,英明的老大發現,乙個團隊整體能力等於這n個人的戰鬥力的中位數,中位數越高則戰鬥力越強。現在老大想知道,這n個人的團隊整體能力最大為多少。

輸入檔名為war.in。

輸入第一行為三個正整數n,t,m,意義如上述。

後接t行,每行兩個正整數wi和vi,代表每個人的戰鬥力值和影響力值。

輸出檔名為war.out。

輸出一行乙個整數,代表這n個人的團隊最大的整體能力。無解輸出-1。

war.in

3 5 70

30 25

50 21

20 20

5 18

35 30

war.out

35 選第2、4、5個人,影響力21+18+30=69<=70,同時該團隊的整體能力為最高的35。

對於30%的資料,保證t≤

200 。

對於100%的資料,保證t≤

100000

,n≤20000

每個人的影響力值

≤100000

,m≤2

31−1 .

我當時一看這個題目,然後就開始準備打暴力,不怎麼想去想,然後打完暴力30分,再然後就…沒有然後了…

考後據說就是把每個人按照戰鬥力值進行排序,那麼列舉中位數,對於第 i 個人,我們只需要求出 1→

i−1 中影響力值最小的 n2

個人之和,i+

1→n 中影響力值最大的 n2

個人之和。

若它們之和再加上當前人的影響力值小於等於 m,就可以更新最大值。

在這之後就得要求區間前k大的數的和了。

只要建乙個大根堆,每次比較當前數字與堆頂元素的大小關係,若比堆頂元素大,則不管;若比堆頂元素小,則取出堆頂元素,放入當前數字,然後更新和。

時間複雜度 o(

nlog

n)先紀念我的30分暴力**

#include 

#include

#include

using

namespace

std;

const

int maxx = 200+10;

int n,t,m,ans=0;

bool yes;

int a[maxx],b[maxx],num[maxx];

struct people ren[maxx];

bool cmp(const people &x,const people &y)

else

dfs(k+1,sum+ren[i].w);

a[k]=0;b[k]=0;

}}int main()

return

0;}

然後這是ac**

#include 

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

inline

int read()

const

int size = 100000+10;

struct node

}node[size];

inline

bool cmp(const node &a,const node &b)

for(int i=1;i<=k;i++)

for(int i=t-k;i>k;i--)

sum1+=top.c;

use[top.num]=true;

q1.pop();

}else use[i]=true;

if(sum1+sum2+node[i].c<=m)

top=q3.top();q3.pop();

sum2-=top.c;q2.push(top);

q2.push(node[i]);

top=q2.top();q2.pop();

sum2+=top.c;q3.push(top);

}puts("-1");

return

0;}

還得繼續想,dp水平才上的去啊,暴力少打點,多想些吧

最後%%%yzy大神%%%即將ak

動態規劃測試test20170518

題意 乙個長度為n的序列 每個元素是 a i,bi 這樣的數對 連續地分成若干組。每組左右邊界是 l 1,r1 l 2,r2 l p,rp 滿足li ri 1 1 li ri l1 1,rp n 分組必須滿足兩個條件 前面組的元素的b值比後面組元素的a值大 令mi 為第i個組內最大的a,所有mi 的...

動態規劃(3)

robberies include include include includeusing namespace std 這題是參考的 自己的能力還是不可以。不過做了這題,再和0 1揹包問題想一想,覺得收穫還是不錯。說將逃跑率當成物品價值 小弟還是要繼續消化這條題的思想。double f 10020...

3動態規劃

此次專題主要講解動態規劃,題目大致分為兩類 一種是遞迴來解決,一種是0 1揹包問題。動態規劃就是把乙個問題分成多個階段來解決,並且每個階段都相互有所聯絡。其遵循最優性原理。1,不論初始狀態和第一步決策是什麼,餘下的決策相對於前一次決策所產生的新狀態,構成乙個最優決策序列。2,最優決策序列的子串行,一...