【TOJ 3282】 Rain's Array

来源:互联网 发布:黑咔相机软件 编辑:程序博客网 时间:2024/04/27 22:53

题意: 给定一个数组,每次取出相邻的两个数,左减右后放回原处,问是否可以组成所要的数。

看别人的代码都很短,我是把从后往前每个位置的可能都算出来,写得好挫

#include<iostream>#include<cstring>#include<vector>#include<algorithm>using namespace std;vector<long long> now;vector<long long> temp;long long a[30];int main(){    int t;int n;long long m;    cin>>t;    while(t--)    {         cin>>n>>m;         for(int i=0;i<n;i++)           cin>>a[i];         now.clear();temp.clear();         int nsum=0;         nsum=a[n-2]+a[n-1];         now.push_back(a[n-2]-a[n-1]);         for(int i=n-3;i>=0;i--)         {             temp=now;             now.clear();             temp.push_back(nsum);             nsum+=a[i];             for(int j=0;j<temp.size();j++)             {                 now.push_back(a[i]-temp[j]);                 now.push_back(a[i]+temp[j]);             }         }         bool flag=0;         for(int i=0;i<now.size();i++)         {             if(now[i]==m)             {                    flag=1;break;             }         }         if(flag)           cout<<"Yes"<<endl;         else           cout<<"No"<<endl;    }}    


 

0 0
原创粉丝点击