码迷,mamicode.com
首页 > 其他好文 > 详细

The Preliminary Contest for ICPC Asia Shanghai 2019 J. Stone game

时间:2019-12-24 13:58:10      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:--   names   main   nbsp   sort   one   mem   code   The   

题目:https://nanti.jisuanke.com/t/41420

思路:当a(a∈S′)为最小值         

           如果Sum(S′)−a≤Sum(S−S′)成立

           那么(∀t∈S′,Sum(S′)−t≤Sum(S−S′))恒成立 

           先算01背包方案数

           再从小到大排序进行退背包

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int a[400];
int dp[150001];
int main()
{
    int T;
    scanf("%d",&T);
    int n;
    while(T--)
    {
        scanf("%d",&n);
        int s=0,ans=0; 
        for(int i=0;i<n;i++) scanf("%d",&a[i]),s+=a[i];
        sort(a,a+n);
        memset(dp,0,sizeof dp);
        dp[0]=1;
        for(int i=0;i<n;i++) 
            for(int j=s;j>=a[i];j--)
                dp[j]=(dp[j]+dp[j-a[i]])%mod;
        for(int i=0;i<n;i++) 
        {
            for(int j=a[i];j<=s;j++) dp[j]=(dp[j]-dp[j-a[i]]+mod)%mod;
            for(int j=0;j<=s-a[i];j++)
                if(j+a[i]>=s-(j+a[i])&&j<=s-j-a[i])
                    ans=(ans+dp[j])%mod;
        }
        printf("%d\n",ans);
    }
    return 0;
}

The Preliminary Contest for ICPC Asia Shanghai 2019 J. Stone game

标签:--   names   main   nbsp   sort   one   mem   code   The   

原文地址:https://www.cnblogs.com/c4Lnn/p/12090711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!