【#247_DIV2】-A B C

2024-09-03 22:08
文章标签 div2 247

本文主要是介绍【#247_DIV2】-A B C,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://codeforces.com/contest/431

解题报告:

A - Black Square

一道神经病的题。。不知道为何水到如此地步。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int maxn =1e5+50;char str[maxn];
int a[10];int main()
{cin>>a[1]>>a[2]>>a[3]>>a[4];scanf("%s",str);int i,ans=0;for(i=0;i<strlen(str);i++)  ans+= a[str[i]-'0'];cout<<ans<<endl;return 0;
}

B -  Shower Line

直接DFS搜出所有排列,找最大值即可

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
using namespace std;int g[6][6],que[6],vis[6];
int ans;int cal()
{return g[que[0]][que[1]]+g[que[1]][que[0]] + g[que[2]][que[3]]+g[que[3]][que[2]] + g[que[1]][que[2]]+g[que[2]][que[1]]+ g[que[3]][que[4]]+g[que[4]][que[3]] + g[que[2]][que[3]]+g[que[3]][que[2]] + g[que[3]][que[4]]+g[que[4]][que[3]];
}void dfs(int dep)
{int i;if(dep==5){int tans = cal();ans = max(ans,tans);//for(i=0;i<5;i++)cout<<que[i]<<" "; cout<<endl;return ;}for(i=0;i<5;i++){if(!vis[i]){vis[i] = 1;que[dep] = i;dfs(dep+1);vis[i] = 0;}}
}int main()
{freopen("input.txt","r",stdin);memset(g,0,sizeof(g));memset(vis,0,sizeof(vis));int i,j;for(i=0;i<5;i++)for(j=0;j<5;j++) cin>>g[i][j];ans=0;dfs(0);cout<<ans<<endl;return 0;
}

C -  k-Tree

一道DP题,没做出来。

以后切记!不会的题大胆猜DP!

dp[ n ][ 0 ] 表示权值和为 n 且路径中没有 >= d 的边的最多路径数。

dp[ n ][ 1 ] 表示权值和为 n 且路径中有 >= d 的边的最多路径数。

输入 n ,k ,d 之后,先把能一步到的 n 给赋上值。

dp[ 1~(d-1) ][ 0 ] = 1

dp[ d~k ][ 1 ] = 1

接下来,多于一步的路径由以下公式推出:

dp[ i ][ 0 ] = dp[ i -1 ][ 0 ] + dp[ i -2 ][ 0 ] + .... + dp[ i - d + 1 ][ 0 ]

dp[ i ][ 1 ] = dp[ i -1 ][ 1 ] + dp[ i -2 ][ 1 ] + .... + dp[ i - k ][ 1 ] + dp[ i -d ][ 0 ] + dp[ i - d - 1 ][ 0 ] + .... + dp[ i - k ][ 0 ]

然后每一步都要取模,取模。。取模。。。。真是烦啊,像我代码里那样就行了

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int MOD = 1e9+7;int mol(int x){return x%MOD;
}int dp[120][2];int main()
{//freopen("input.txt","r",stdin);memset(dp,0,sizeof(dp));int n,k,d,i,j;cin>>n>>k>>d;for(i=1;i<d;i++) dp[i][0]=1;for(i=d;i<=k;i++) dp[i][1]=1;for(i=1;i<=n;i++){for(j=i-1; j>=0 && j>=i-d+1; j--) {dp[i][0] = mol(mol(dp[i][0]) + mol(dp[j][0]));}for(j=i-1; j>=0 && j>=i-k; j--) {dp[i][1] = mol(mol(dp[i][1]) + mol(dp[j][1]));}for(j=i-d; j>=0 && j>=i-k; j--) {dp[i][1] = mol(mol(dp[i][1]) + mol(dp[j][0]));}//cout<<i<<": "<<dp[i][0]<<" "<<dp[i][1]<<endl;}cout<<dp[n][1]<<endl;return 0;
}


这篇关于【#247_DIV2】-A B C的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134175

相关文章

Codeforces Round #247 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/431/problem/A 解题思路: 构造出来即可。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <string>#inc

【#254_DIV2】-A B C

题目链接:http://codeforces.com/contest/445 解题报告: 俄国人今天不知道为什么九点钟就比赛了。只过了两道题,第三题完全没思路,有时间单独去刷第三题吧,看起来很难 A - DZY Loves Chessboard 太水了。。。 直接W、B错开填,顺便先抹上“ - ” 就完了 #include <iostream>#include <cstdio>

Codeforces 969 div2[A~E] 个人题解

目录 A - Dora's Set 原题链接 思路分析 AC代码 B - Index and Maximum Value 原题链接 思路分析 AC代码 C - Dora and C++ 原题链接 思路分析 AC代码 D - Iris and Game on the Tree 原题链接 思路分析 AC代码 E - Iris and the Tree 原题链接 思

LeetCode 题247:线段树的查询(2)

题目描述: 对于一个数组,我们可以对其建立一棵线段树, 每个结点存储一个额外的值 count 来代表这个结点所指代的数组区间内的元素个数。(数组中并不一定每个位置上都有元素) 实现一个 query 的方法,该方法接受三个参数 root, start 和end, 分别代表线段树的根节点和需要查询的区间,找到数组中在区间[start, end]内的元素个数。 例如: 对于数组 [0, 空,2,

Codeforces Round #247 (Div. 2) A B

A 就是下标求和,无难度 #include <stdio.h>#include <stdlib.h>#include <math.h>char s[1000000];int a[4];int main(){scanf ("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);scanf ("%s",s);char *p = s;int ans = 0;while (

CodeForces #308 Div2 E(552E Vanya and Brackets)

E. Vanya and Brackets time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Vanya is doing his maths homework. He has an

Codeforces #247 (Div. 2) C. k-Tree

题意就不说了 我上来就用暴力回溯写了,这几天练暴力练得脑残了 暴力的代码如下: #include <cstdio>#include <iostream>#include <algorithm>#define MAXN 10010#define ll long longusing namespace std;int n, k, d;int maxs, sum;int a[MA

Codeforces #247 (Div. 2) B. Shower Line

暴力题,知道下一个排列:next_permutation()就好做了 b[1]-b[5]为1-5的全排列 则找出b的所有全排列,计算sum = a[b[1]][b[2]] + a[b[2]][b[1]] + a[b[2]][b[3]] + a[b[3]][b[2]] + 2*a[b[3]][b[4]] + 2*a[b[4]][b[3]] + 2*a[b[4]][b[5]]+2*a[b[5]][

Codeforces #247 (Div. 2) A. Black Square

水题一道,4分钟AC 代码如下: #include <cstdio>#include <iostream>#include <algorithm>#define MAXN 100010#define ll long longusing namespace std;int a[MAXN];int main(void) {for(int i=1; i<=4; ++i) {cin >>

CodeForce #429 DIV2 A B C题解

A:http://codeforces.com/contest/841/problem/A 题意:n个气球分给k个人,是否有这样的解:每个人手里的气球都颜色不重复 思路:个数最多的颜色个球的个数 >k, 就必然有人手里两个球 #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>usin