小美的数组构造

思路

求方案数,考虑用dp

个数之和等于,且每位都和所有方案的方案数

代码

#include <iostream>
using namespace std;

typedef long long LL;

const int N = 510, p = 1e9 + 7;
int dp[N][N];
int a[N];

int main() {
    int n;
    cin >> n;
    int s = 0;
    for(int i = 1; i <= n; i++)  cin >> a[i], s += a[i];

    dp[0][0] = 1;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= s; j++) {
            for(int k = 1; k <= j; k++) {
                if(k != a[i])   dp[i][j] = ((LL)dp[i][j] + dp[i-1][j - k]) % p;
            }
        }
    cout << dp[n][s] << endl;
    return 0;
}
// 64 位输出请用 printf("%lld")
全部评论

相关推荐

03-05 12:52
吉林大学 Java
挣K存W养DOG:他的价值在于把他家里积攒的财富回馈给社会
点赞 评论 收藏
分享
xwqlikepsl:感觉很厉害啊,慢慢找
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务