首页 > 其他分享 >acwing第80场周赛

acwing第80场周赛

时间:2022-12-04 09:33:06浏览次数:53  
标签:周赛 int dfs num str ans 80 dp acwing

比赛地址
核心思路:这是一眼暴力搜索题,但是我们怎么取构造他们的参数呢。首先我们肯定需要4和7的个数,所以这两个参数是肯定需要的,还有就是我们需要他们两个个数加起来不能够大于我们的目标字符串的长度,所以我们也需要一个u。在然后加入我们的搜索的字符串就好了。

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
char s[N];
string ans, num;
void dfs(string str, int u, int s4, int s7)//这里的u表示遍历到第几层了
{
	if (u == num.size())
	{
		if (str >= num && (ans.empty() || ans > str))
			ans = str;
		return;
	}
	if (s4 < num.size()  /2)//注意这里是不可以取等号的,还加一就不平衡了
	{
		dfs(str + '4', u + 1, s4 + 1, s7);
	}
	if (s7 < num.size() / 2)
		dfs(str + '7', u + 1, s4, s7 + 1);
}
int main()
{
cin >> num;

    if (num.size() % 2) num = '0' + num;

    dfs("", 0, 0, 0);

    if (ans.empty())
    {
        num = "00" + num;//注意我们这里是往字符串前面加0.例如9999
        dfs("", 0, 0, 0);
    }

    cout << ans << endl;

    return 0;
}

核心思路:刚开始我以为是组合数问题,没想到居然是dp问题。

  1. 集合定义:dp[i][j][k][u]为摆放了i个白子,j个黑子,最后一段连续的黑子数目k和连续的白字数目是u。

  2. 集合划分:其实我们可以发现这个集合不太好划分,所以我们就需要想怎么去转移呢。因为dp问题其实是可以看作最短路的。所以我们需要注意我们这个状态可以转移到什么其他状态就可以了。

  3. 状态转移方程:dp[i+1][j][k+1][0]+=dp[i][j][k][u].

dp[i][j+1][0][u+1]+=dp[i][j][k][u].

代码:

#include<bits/stdc++.h>
using namespace std;

const int N = 110, M = 11, MOD = 1e8;

int n1, n2, k1, k2;
int f[N][N][M][M];
int main()
{
	cin >> n1 >> n2 >> k1 >> k2;
	f[0][0][0][0] = 1;//不摆放也是一种方案.
	for(int i=0;i<=n1;i++)
		for(int j=0;j<=n2;j++)
			for(int k=0;k<=k1;k++)
				for (int u = 0;u <= k2;u++)
				{
					int v = f[i][j][k][u];
					if (i + 1 <= n1 && k + 1 <= k1)
						f[i + 1][j][k + 1][0] = (f[i + 1][j][k + 1][0] + v) % MOD;//为什么是0呢,一定要注意我们的那个定义
					if (j + 1 <= n2 && u + 1 <= k2)
						f[i][j + 1][0][u + 1] = (f[i][j + 1][0][u + 1] + v) % MOD;
				}
	int res = 0;
	for (int i = 0;i <= k1;i++)
		for (int j = 0;j <= k2;j++)
			res = (res + f[n1][n2][i][j]) % MOD;
	cout << res << endl;

}

标签:周赛,int,dfs,num,str,ans,80,dp,acwing
From: https://www.cnblogs.com/xyh-hnust666/p/16949412.html

相关文章

  • AtCoder Beginner Contest 280 题解
    A-PawnonaGrid看样例猜题意(要求的是#的数量,直接判断。//If,oneday,Ifinallymanagetomakemydreamsareality...//Iwonder,willyoustillbethere......
  • AtCoder Beginner Contest 280 D-E
    D-FactorialandMultiple前置知识\(n!\)中包含素因子\(p\)的个数为\[cnt=\sum\limits_{k\geq1}^{p^k\leqn}\lfloor\frac{n}{p^k}\rfloor\]例如:\(n!\)......
  • ORA-28040: 没有匹配的验证协议
    问题:ORA-28040:没有匹配的验证协议原因:Oracle数据库安装的是12.2版本,OracleClient安装的版本是11(ODTwithODAC1120320_32bit)。解决:打开 sqlnet.ora 文件,增加以下两行......
  • mysql学习系列:总结数据库连接不上的数种情况,问题编号:ERROR 1045 (28000)
    (文章目录)场景今天重启CDH的时候,发现重启报错,查看日志才发现是mysql数据库连接不上。在尝试解决的过程中,踩到一些坑。所以总结一下,并分享给大家看看,减少大家伙继续踩坑的......
  • NSSCTF周赛Misc-hint1
    O​​​​‎‏‎​​​​‎‏‍​​​​‏‎​​​​​‏​‌​​​​‍​‏​​​​‍​‍​​​​‌‏‌​​​​‏​​​​​​‏​‌​​​​‎‏‏​​​​‏‍‌​​......
  • acwing 273. 分级
     #include"bits/stdc++.h"usingnamespacestd;constintN=2e3+3;intn,a[N],b[N],f[N][N];intA=1e9;voidsov(){inti,j,k;for(i=1;i<=n;i++)......
  • 802.1x
    802.1基本概念......
  • acwing 152. 城市游戏
     #include"bits/stdc++.h"usingnamespacestd;constintN=1e3+3;intn,m,a[N][N],s[N][N];intA;intw[N],h[N],pp;voidsov(intx){inti,ans=0......
  • PIE-engine 教程 ——提取黄河流域/山西省1980—2018年流域降水量并对比分析
    这里面我们首先要上传我们自己的研究区,然后加载每一年的数据降水数据,通过系数转化,完成正常降水量的展示,我们通过对reduceregion的统计,分别算出平均降水量,分辨率设定为1000米......
  • 时间 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......