Day1下午解題報告

2021-09-07 15:30:41 字數 3178 閱讀 8195

貪心,按長度排序,

對於第一幅牌裡面的,在第二個裡面,找乙個長度小於,高度最接近的牌

進行覆蓋。

考場上的我離正解只差乙個小於號之遙。。。。。。。

1 #include 2 #include 

3 #include 4 #include 5 #include

6using

namespace

std;

7int

n;8 multiset s;

9struct node a[100005],b[100005

];10

int cmp(node i,node j)

11int

main()

1233

if(s.empty())continue

;34 multiset::iterator it=s.upper_bound(a[i].y);

35if (it==s.begin()) continue; it--;

36 ans++; s.erase(it);37}

38 printf("

%d\n

",ans);39}

40return0;

41 }

view code

不會做,手玩30分

正解dp||爆搜

1 2 4 8 ...

1 3 7 15 31 ...

int(log(n)/log(2))+1

方案總數:dp,搜尋

2^0+2^1+...+2^k = o(n)

k=log(n)

dfs(max,sum,s) // max金幣最大值,sum所有金幣的和,s金幣的數量

dp[i][j][k] 當前有i個金幣,金幣和是j,最大的金幣k。

if (dp[i][j][k]) 列舉下一枚金幣是啥。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int maxn=1e6;

7 inline int

read()811

while(c>='

0'&&c<='

9') x=x*10+c-48,c=getchar();return x*flag;12}

13int

n;14

intmain()

15

view code

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;

7int n,sum,ans,dp[1005][1005],dp[1005][1005

],i,j,k,l;

8int

main()923

}24for (j=1; j<=n; j++) ans+=dp[n][j];

25 cout

'<

26return0;

27 }

標程

lyk在學習dp,有一天它看到了一道關於dp的題目。

這個題目是這個樣子的:一開始有n個數,一段區間的價值為這段區間相同的數的對數。我們想把這n個數切成恰好k段區間。之後這n個數的價值為這k段區間的價值和。我們想讓最終這n個數的價值和盡可能少。

例如6個數1,1,2,2,3,3要切成3段,乙個好方法是切成[1],[1,2],[2,3,3],這樣只有第三個區間有1的價值。因此這6個數的價值為1。

lyk並不會做,丟給了你。

輸入格式:

第一行兩個數n,k。

接下來一行n個數ai表示這n個數。

輸出格式:

乙個數表示答案。

輸入樣例#1: 

複製

10 2

1 2 1 2 1 2 1 2 1 2

輸出樣例#1: 

複製

8
對於30%的資料n<=10。

對於60%的資料n<=1000。

對於100%的資料1<=n<=100000,1<=k<=min(n,20),1<=ai<=n。

其中有30%的資料滿足ai完全相同均勻分布在所有資料中。

考場上我想出60分的dp了

但是我感覺不對,直覺告訴我一定不對,。

但實際上是對的mmp。。。。。

打了30分暴力走人,,

正解:dp[i][j] 1~i 切了j刀,的最優解

dp[i][j]=min

可以證明這個轉移方程具有單調性

20*n^2的簡單dp -> 在固定j的情況下 隨著i的增大,k不降 -> 分治求dp值

1 #include 2 #include 3 #include 4

#define n 1000011

5#define min(x, y) ((x) < (y) ? (x) : (y))

6#define max(x, y) ((x) > (y) ? (x) : (y))

7using

namespace

std;

8int

n, q, ans;

9int

f[n];

1011

struct

node

12p[n], t[n];

1516 inline int

read()

1724

25 inline bool

cmp(node x, node y)

2629

30 inline int find(int

x)31

3435 inline bool check(int

k)36

53else

5461}62

//cout<63

if(find(lmax) > rmin) return1;

64return0;

65}6667

intmain()

6886 printf("

%d\n

", ans);

87return0;

88 }

view code

濟南刷題衝刺 Day1 下午

time limit 1000ms memory limit 128mb 題目描述 lyk出了道水題。這個水題是這樣的 有兩副牌,每副牌都有n張。對於第一副牌的每張牌長和寬分別是xi和yi。對於第二副牌的每張牌長和寬分別是aj和bj。第一副牌的第i張牌能覆蓋第二副牌的第j張牌當且僅當xi aj並且y...

Day 1 下午 乙太網幀結構

iso 國際標準化認證 osi ieee 電氣電子工程師協會 ietf 網際網路工程小組 soi標椎 物理層 資料鏈路層 網路層 傳輸層 會話層 表示層 應用層 上三層為產生資料 下四層 通訊協議相當於網路中的語言 應用層 通過埠去呼叫應用程式 埠應用層 http 80 https 443,8080...

python學習 day11下午

單例模式,可以用在資料庫,這樣只建立一條管道即可 class a def new cls,args,kwargs if not hasattr a,xiaogou cls.xiaogou object.new cls return cls.xiaogou def init self,name sel...