zoukankan      html  css  js  c++  java
  • upcoj 2169 DP

    题意:求给出的数组中元素求和能被m整除的最大元素个数.

    一开始想BFS搜索,数据太大,无果。太急去敲了,应该早就料到数据太大,但是有一个思路之后却总想去试试。。

    好了,DP

    状态转移方程dp【i】【(v+a【i】)%m】=max(dp【i】【(v+a【i】)%m】,dp【i-1】【v】+1)    //  dp[i][v]代表对于第i个状态数字处理时,能组成%m=v的数字的个数

    但是由于规模将近5qw  直接存数组不行,用另外一个数组来记录前一个数组的状态。

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    using namespace std;
    int a[550];
    int dp[100100];
    int fdp[100100];
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            int n,m;
            cin>>n>>m;int sum=0;
            for(int i=0;i<n;i++)
            {
                cin>>a[i];
                sum+=a[i];
            }
            memset(dp,0,sizeof(dp));
            memset(fdp,0,sizeof(fdp));
            fdp[0]=1;
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                dp[j]=fdp[j];
                for(int j=0;j<m;j++)
                {
    
                    if(fdp[j]>0)   //有j余出
                        {
                            dp[(j+a[i])%m]=max(dp[(j+a[i])%m],fdp[j]+1);
                        }
                }
                for(int j=0;j<m;j++)
                fdp[j]=dp[j];
    
            }
            cout<<fdp[0]-1<<endl;
        }
        return 0;
    }
    

  • 相关阅读:
    光盘和U盘
    解决时间同步
    僵尸进程 和 孤儿进程
    Centos虚拟机设置网络模式
    常用CDN 和 后台管理模板
    微信小程序wxs如何使用
    kubernetes/client-go--使用 Clientset 获取 Kubernetes 资源对象
    samplecontroller
    volcano
    DNS欺骗
  • 原文地址:https://www.cnblogs.com/amourjun/p/5134155.html
Copyright © 2011-2022 走看看