QBXT2020十一 Day1 考試題解

2022-05-05 16:27:07 字數 3030 閱讀 8019

手推可以得到結果,注意特別判定\(n = 1,2,3\)時的情況

經過手推,可以得到當且僅當n是奇數且0是先手,0才會獲勝。

#include#include#include#define n 100010

using namespace std;

char c[n];

int t,op;

int main()

while (c >= '0' && c <= '9')

return tot * f;

}long long n, m, k;

long long x[maxn], y[maxn], z[maxn], totx, toty, wx, wy;//橫行是x,縱列是y

bool visx[maxn], visy[maxn];

long long ans = 0;

int main()

} else

} }cout << ans << endl;

return 0;

}

倒序操作類似題目:\(bzoj 2054\)瘋狂的饅頭

離線演算法。將所有詢問按照時間順序排序,每次對於新的詢問,都用冒牌排序進行更新,從而求出第\(k\)的值。

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define dd double

#define ll long long

#define mp make_pair

#define pb push_back

#define n 7010

#define m 1010

using namespace std;

int n,q;

struct ma

w[n];

bool cmp1(ma x,ma y)

struct am

q[n];

bool cmp2(am x,am y)

cin>>q;

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

sort(w+1,w+n+1,cmp1);

sort(q+1,q+q+1,cmp2);

for(int i=0;i<=q;i++)

}q[i].ans=w[q[i].k].num;

} sort(q+1,q+q+1,c***);

for(int i=1;i<=q;i++) printf("%d\n",q[i].ans);

}

考場思路:四維\(dp\),但是寫掛了。

#include #include #include #include #include using namespace std;

const int maxn = 2009;

int m, n;

int a[maxn], b[maxn];

int ans = 2147483647;

int sa[maxn], sb[maxn];

int f[maxn][maxn];

int main()

for (int i = 1; i <= n; ++i) for (int j = 1;j <= m; ++j) f[i][j] = 0x3ffff;

f[1][1] = 0;

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

}} }

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

cout << f[n][m] << endl;

return 0;

}

首先,由於(s2-k2)(s1-k1)每次加上乙個數都要減去1,我們可以預處理全部減一,每次的操作得分就變成s2s1。

因為每個數都是正整數,對於數列1中的連續兩段數a,c數列2中的連續兩段數b,d易得(a+c)*(b+d)>=ab+cd。所以當每次兩個數列都只取乙個數時結果最小。

但是,兩個數列不等長,無法一對一消除。所以可能出現一對多的情況。

綜上,使用dp

f[i][j]表示一數列已刪去i個數另一數列已刪去j個數時的最優解。

\[f[i][j]=min+a[i]*b[j];

\]當兩邊都只取乙個數的時候

\[f[i][j]=f[i-1][j-1]+a[i]*b[j];

\]當其中乙個數列取多個數的時候 \(f[i][j]=f[i][j-1]+a[i]*b[j]\) 表示a中只取乙個數,b中可能取多個數,由乘法分配律\(a\times (b+c)=a\times b+a\times c\)得相對於f[i][j-1]增加的數為a[i]*b[j]

初始化:f=maxlint,f[0][0]=0。

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define dd double

#define ll long long

#define mp make_pair

#define pb push_back

#define n 2010

#define m 1010

using namespace std;

int n,m;

int a[n],b[n];

int f[n][n],g[n][n];

int main()

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

memset(f,0x3f,sizeof(f));

memset(g,0x3f,sizeof(g));

f[0][0]=g[0][0]=0;

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

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

int ans=min(f[n][m],g[n][m]);

cout<}

QBXT2020十一 Day1 上課筆記

選擇 難度小 好寫的列舉方法 老師甚至講了dfs爆搜最短路,dfs爆搜全宇宙 dfs求解圖中環 記錄vis陣列,查詢是否重複訪問節點 記錄是否入棧,即搜尋過後要將vis歸零 八皇后問題 按行搜尋或者按照列搜尋。noi1999 生日蛋糕 剪枝方法 老師講了單源最短路徑 單源最短路徑 rightarro...

luogu 十一 基本套路 day1

對於乙個線段,要不就只買票,要不就用ic卡 貪心嘛 所以只要比較這兩種策略,取較大值就好。rep i,1,n 1 rd n rd m while m rep i,1,n rep j,1,n 構造相鄰的兩頭牛,看能不能貪心,且看需要滿足什麼條件的時候才能貪心。設有相鄰的兩頭牛a,b,來討論一下在滿足什...

2020寒假集訓Day1 分治 總結

已經會了東西就略過了 下面就是自己新學會的 1 d維數點的bitset暴力方法 o d n 2 w 每個點開d個bitset,分別排序遞推,然後把答案 起來即可 乙個trick bitset按編號分塊,多做幾次,可以節省記憶體,例題 傳遞閉包 想想我以前只會o d n 2 2 cdq分治解決動態凸殼...