AtCoder Beginner Contest 044 C (dp)

原创 2016年08月29日 22:16:50

高橋君とカード / Tak and Cards (题目链接)



题意:给定n,m,n个数,求在这n个数中选取若干个数,其平均数为m的方案数。

思路:裸dp。。dp[i][j]代表i个数和为j的方案数。


/*************************************************************************
     File Name: C.cpp
     ID: obsoles1
     PROG: 
     LANG: C++ 
     Mail: 384099319@qq.com 
     Created Time: 一  8/29 21:22:01 2016
 ************************************************************************/
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
#define EACH(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();++it)
#define ABS(x,y) ((x)>(y)?((x)-(y)):((y)-(x)))
#define MEM0(x) memset(x,0,sizeof(x))
#define MEM1(x) memset(x,-1,sizeof(x))
#define MEMX(x) memset(x,0x3f,sizeof(x))
#define pb push_back
#include<iostream>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=60;
LL dp[N][N*N];
int x[N];

int main() {
  int n,m,i,j,k,tmp;
  ios::sync_with_stdio(0);
  while (cin>>n>>m) {
    for (i=1; i<=n; ++i) cin>>x[i];
    MEM1(dp);
    dp[0][0]=1;
    for (k=1,tmp=0; k<=n; ++k) {
      tmp+=x[k];
      for (i=k; i>=1; --i)
        for (j=tmp; j>=x[k]; --j) {
          if (dp[i-1][j-x[k]] == -1) continue;
          if (dp[i][j] == -1) dp[i][j]=0;
          dp[i][j]+=dp[i-1][j-x[k]];
        }
    }
    LL ans=0;
    for (i=1; i<=n; ++i)
      if (dp[i][i*m] != -1)
        ans+=dp[i][i*m];
    cout<<ans<<endl;
  }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

AtCoder Grant Contest 010 C - Cleaning dfs+逻辑+dp思想

题意:给定一个树,每个节点的权值为Ai,每次可以挑选两个叶子节点,将两个叶子节点之间路径上的权值-1。问最后能不能使得整棵树的权值为0。 解法:验证解的存在性,就去试着找出一组可行解。这题从最末端...

AtCoder Beginner Contest 061 D Score Attack(Bellman-ford)

点击打开题目链接 D - Score Attack Time limit : 2sec / Memory limit : 256MB Score : 400 points Proble...

AtCoder Beginner Contest 069 D - Grid Coloring

D - Grid Coloring Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem...

AtCoder Beginner Contest 052

没看到Beginner,然后就做啊做,发现A,B太简单了。。。然后想想做完算了。。没想到C卡了一下,然后还是做出来了。D的话瞎想了一下,然后感觉也没问题。假装all kill.2333 AtC...

AtCoder Beginner Contest 068 D - Decrease (Contestant ver.)

Time limit : 2sec / Memory limit : 256MB Score : 600 points Problem Statement We have a sequenc...

AtCoder Grand Contest 012 B - Splatter Painting(dp)

Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Squid loves paintin...

【AtCoder】 Grand Contest 018 C - Coins

C - Coins Time limit : 2sec / Memory limit : 256MB Score : 800 points Problem Statement There a...
  • ZZZZone
  • ZZZZone
  • 2017年07月28日 21:41
  • 127

ATcoder Grander Contest 17C Snuke and Spells 附题意

题目大意: N个球,每个球上有1-N之间的数字。 如果当前有K个球,那么球上数字为K的所有球都会同时消失,然后继续进行这个操作。如果操作无法进行下去,就终止。你的任务是让所有球消失。 不难发现,...

AtCoder Regular Contest 079 C D E

C 问是否能两步从1到达n 开两个数组存是否能一步到达1和n #include using namespace std; #define inf 0x3f3f3f3f #define PI acos...

AtCoder Regular Contest 058 C (水题)

C こだわり者いろはちゃん / Iroha's Obsession 题意:给定n,k,k个不喜欢的数字,求最小的不出现不喜欢的数字且比n大的值。n 思路:我分了三种情况讨论。。。但是被学弟bs了。。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AtCoder Beginner Contest 044 C (dp)
举报原因:
原因补充:

(最多只允许输入30个字)