牛客挑战赛34 赛后总结

总结

T1 背包|简单dp 在短时间内切了。 改进:需要认真审题,抓住题目的每一个细节。还可以适当提高做题速度qwq

T2 我是用打表找规律切的。 (虽然这样做有点无耻)改进:要加快自己总结规律的速度,要冷静分析规律。常用的规律有 2^n 这种。

比赛总结:

  • 要沉稳一点,比赛的时候不要嘻嘻哈哈。

  • 下一次 <牛客挑战赛> 争取做出三道题,或者在1h30min内切掉前两道题。

A

Code

#include<bits/stdc++.h>
using namespace std;
inline int read() {
	int x=0,f=1; char ch=getchar();
	while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
	while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
	return x * f;
}
const int N =  807;
int n,m,K,Y;
int a[N],p[N][N];
int f[N][N];	
int main()
{
	n = read(), m = read(), K = read(), Y = read();
	for(int i=1;i<=n;++i) a[i] = read();
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
			p[i][j] = read();
	memset(f, 0x3f, sizeof(f));
	f[0][0] = 0;
	for(int i=1;i<=n;++i)
		for(int j=0;j<=K;++j)
			for(int l=0;l<=min(j,m);++l)
				f[i][j] = min(f[i][j], f[i-1][j-l]+(l>=Y?p[i][l]:p[i][l]+a[i]*l));
	printf("%d\n",f[n][K]);
	return 0;
}

B

无耻打表

code

#include<bits/stdc++.h>
using namespace std;
inline int read() {
    int x=0,f=1; char ch=getchar();
    while(ch<'0' || ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
    while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch^48); ch=getchar(); }
    return x * f;
}
int n,k,lgn,lgk;
int main()
{
    n = read(), k = read();
    if(!(k&1)) {
        puts("0 0"); return 0;
    }
    lgn = (int)(log2(n+1)), lgk = ceil((log2(k+1)));
    int sum = lgn-lgk+1;
    int mx = ((1<<(lgn))+k)>>1;
    if(n-((1<<(lgn))-1) >= ((k+1)>>1))
        ++sum, mx = ((1<<(lgn+1))+k)>>1;
    printf("%d %d\n",sum,mx);
    return 0;
}

C

距离算法:切比雪夫距离和曼哈顿距离的转换题。套路题,改天学一下再补起来好了。

D

涉及数学知识点,改天补一下。

posted @ 2019-11-25 14:36  基地AI  阅读(124)  评论(0编辑  收藏  举报