zoukankan      html  css  js  c++  java
  • 1010STAMPS

    做的过程有个疑问,要不要建一个4倍于原来价格的数组,其中前四个相同等于第一个原来的价格,后来发现这样会导致tie,所有就放弃这种做法,后面用了一个for(j)循环搞定了

    for(i=a+1;i<=n;i++){
    for(int j=1;j<=4;j++){

    验证答案都对了,提交时,提示超时,看了人家的代码,之后发现,自己的代码无论怎么输入都不会结束,所以也借用了人家代码中的一个语句

    if(scanf("%d",&a)==EOF)exit(0);

    我的代码,ACCEPT

    #include "iostream"
    #include "string.h"
    #include "algorithm"
    
    using namespace std;
    int data[1000],bestlei=0,bestliang=0,bestmax=0,flag,x,n,set[1000],list[1000],p[1000],man[1000],y;
    
    int check(){
      int i,tem=0;
      for(i=1;i<=n;i++){
        if(set[i])tem++;
      }
      if(tem>bestlei){bestlei=tem;return 0;}
      else if(tem==bestlei){return 1;}
      else return 2;
    }
    
    void chang(int a){
      int i;
      x=a;
      for(i=1;i<=a;i++){
        list[i]=data[i];
      }
    }
    
    void dfs(int a,int step,int sum){
      int i;
      if(sum>y)return;
      if(step>4)return;
    
      if(sum==y){
        int tem=check();
        if(tem==0){
            chang(step);
            bestliang=step;
            bestmax=p[a];
            flag=0;
        }
        else if(tem==1){
          if(step<bestliang){
            chang(step);
            bestliang=step;
            bestmax=p[a];
            flag=0;
          }
          else if(step==bestliang){
            if(p[a]>bestmax){
              chang(step);
              bestmax=p[a];
              flag=0;
            }
            else if(p[a]==bestmax){flag=1;}
          }
        }
        return;
      }
      for(i=a+1;i<=n;i++){
        for(int j=1;j<=4;j++){
          set[i]=1;
          data[step+j]=p[i];
          dfs(i,step+j,sum+p[i]*j);
          set[i]=0;
        }
      }
    }
    
    int main(){
      int a,i,top,num[1000];
      while(true){
        top=1;
        while(true)
        {
            if(scanf("%d",&a)==EOF)exit(0);
            if(a==0)break;
            p[top++]=a;}
        n=top-1;
        sort(p+1,p+n+1);
        top=1;
    
        while(cin>>a&&a){man[top++]=a;}
        for(i=1;i<top;i++){
            memset(set,0,sizeof(set));
            flag=2;
            y=man[i];
            bestlei=0;bestliang=0;bestmax=0;
            dfs(0,0,0);
            if(flag==1)cout<<man[i]<<" ("<<bestlei<<"):"<<" tie"<<endl;
            else if(flag==0){
              cout<<man[i]<<" ("<<bestlei<<"):";
              for(int j=1;j<=x;j++){
                cout<<' '<<list[j];
              }
              cout<<endl;
            }
            else {
              cout<<man[i]<<" ---- "<<"none"<<endl;
            }
        }
      }
    }
  • 相关阅读:
    mysql命令集锦
    linux 删除文件名带括号的文件
    linux下的cron定时任务
    struts2文件下载的实现
    贴一贴自己写的文件监控代码python
    Service Unavailable on IIS6 Win2003 x64
    'style.cssText' is null or not an object
    "the current fsmo could not be contacted" when change rid role
    远程激活程序
    新浪图片病毒
  • 原文地址:https://www.cnblogs.com/dowson/p/3392583.html
Copyright © 2011-2022 走看看