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 Beginner Contest 083 D题

题目大意 给定由’0’ ’1’组成的字符串,需要你求出一个长度,你可以选定区间进行翻转,翻转即是将这个区间内的0变为1,1变为0, 这个区间长度必须大于等于所求的长度,保证在能使所有字符都变为0的...
  • OttsWang
  • OttsWang
  • 2017年12月27日 20:47
  • 69

AtCoder Beginner Contest 086 C - Traveling

AtCoder 086 C Beginner Concest 086C Problem Statement AtCoDeer the deer is going on a trip in a two...
  • Jasmineaha
  • Jasmineaha
  • 2018年01月29日 00:30
  • 32

AtCoder Beginner Contest 084 C题

题目大意:一共有N个火车站,每个火车站给出该站第一班列车的出发时间S以及到下一站的时间C和列车出发的频率F,S能被F整除,频率的意思是出发时间只能在大于等于S的时间并且出发时间能被F整除,现在要求从第...
  • OttsWang
  • OttsWang
  • 2018年01月04日 19:56
  • 68

AtCoder Beginner Contest 067 C - Splitting Pile

题目链接:(http://abc067.contest.atcoder.jp/tasks/arc078_a )题意:n个卡片上有数字,从上到下依次取走一些卡片,和为x,剩余的数字之和为y,然后求|x-...
  • xingxingblink
  • xingxingblink
  • 2017年07月16日 13:03
  • 134

AtCoder Beginner Contest 052

没看到Beginner,然后就做啊做,发现A,B太简单了。。。然后想想做完算了。。没想到C卡了一下,然后还是做出来了。D的话瞎想了一下,然后感觉也没问题。假装all kill.2333 AtC...
  • KEYboarderQQ
  • KEYboarderQQ
  • 2017年02月27日 21:23
  • 367

AtCoder Regular Contest 086

蒻苣的题解……C Not so Diverse 题意:给定有n个数的数组A,求最少对其中的多少个元素重新赋值使数组中最多有k个不同的数? 1≤K≤N≤200000 1≤Ai≤N分析:计数排序...
  • feng_zhiyu
  • feng_zhiyu
  • 2017年12月10日 22:26
  • 61

AtCoder Beginner Contest 085 C - Otoshidama【暴力】

C - Otoshidama Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement The...
  • nobleman__
  • nobleman__
  • 2018年01月08日 10:34
  • 102

AtCoder Beginner Contest 085 C Otoshidama(计算机整数乘法问题+方程求解)

Problem StatementThe commonly used bills in Japan are 10000-yen, 5000-yen and 1000-yen bills. Below,...
  • deepseazbw
  • deepseazbw
  • 2018年01月09日 15:04
  • 57

C - Shopping Street(AtCoder Beginner Contest 080)

题目链接              https://beta.atcoder.jp/contests/abc080/tasks/abc080_c 解题方法           因为一共只有十个时...
  • DongChengRong
  • DongChengRong
  • 2017年12月03日 22:29
  • 97

AtCoder Beginner Contest 069

C - 4-adjacent Problem Statement We have a sequence of length N, a=(a1,a2,…,aN). Each ai is a po...
  • phrenetic_
  • phrenetic_
  • 2017年08月06日 21:38
  • 109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AtCoder Beginner Contest 044 C (dp)
举报原因:
原因补充:

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