最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

STAMPS

IT圈 admin 1浏览 0评论

STAMPS

POJ 1010


只用于记录


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int go[33];
int d[5],ans[5];
int n;
int len,real_len;
bool isequal;
int cur;int num(int deep)
{bool vis[33];memset(vis,false,sizeof(vis));int x=0;for (int i=0;i<deep;i++) if (!vis[d[i]]){vis[d[i]]=true;x++;}//for (int i=0;i<deep;i++) cout<<d[i]<<' ';cout<<x<<endl;return x;
}void cmp(int deep)
{int i;int x=num(deep);//cout<<(x==len)<<' '<<(deep==real_len)<<' '<<(d[0]==ans[0])<<endl;// {for (int i=0;i<deep;i++) cout<<go[d[i]]<<' ';cout<<endl;}// cout<<go[d[0]]<<' '<<go[ans[0]]<<endl;if (x>len){len=x;real_len=deep;for (i=0;i<deep;i++) ans[i]=d[i];isequal=false;}else if (x==len){if (deep<real_len){real_len=deep;for (i=0;i<deep;i++) ans[i]=d[i];isequal=false;}else if (deep==real_len){if (go[d[0]]>go[ans[0]])  //这里要注意要加go,ans[],d[]只是go的索引值 {for (i=0;i<deep;i++) ans[i]=d[i];isequal=false;}else if (go[d[0]]==go[ans[0]]) isequal=true;}}}void cmp2(int deep)
{int x=num(deep);cout<<x<<endl;if (len==0 || x>len || (x==len&&real_len>deep) || (x==len&&real_len==deep&&d[0]>ans[0])){len=x;real_len=deep;for (int i=0;i<deep;i++) ans[i]=d[i];isequal=false;}if (x==len&&real_len==deep&&d[0]==ans[0]) isequal=true;
}void dfs(int p,int sum,int deep)
{if (sum == cur){//for (int i=0;i<deep;i++) cout<<go[d[i]]<<' ';cout<<endl;cmp(deep);return;	}if (deep==4) return ;for (int i=p;i<n;i++) if (sum+go[i]<=cur){d[deep]=i;dfs(i,sum+go[i],deep+1);}
}bool comp(int a,int b)
{return a>b;
}int main()
{freopen("in","r",stdin);int i,j,k;while (cin>>go[0]){n=1;if (go[0])while (cin>>go[n]){if (go[n]) n++;else break;}sort(go,go+n,comp);while (cin>>cur,cur){len=0;real_len=0;isequal=false;dfs(0,0,0);printf("%d ",cur);if (len==0) printf("---- none\n");else if (isequal) printf("(%d): tie\n",len);else {printf("(%d):",len);for (i=real_len-1;i>=0;i--) printf(" %d",go[ans[i]]);printf("\n");}}}}


STAMPS

POJ 1010


只用于记录


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int go[33];
int d[5],ans[5];
int n;
int len,real_len;
bool isequal;
int cur;int num(int deep)
{bool vis[33];memset(vis,false,sizeof(vis));int x=0;for (int i=0;i<deep;i++) if (!vis[d[i]]){vis[d[i]]=true;x++;}//for (int i=0;i<deep;i++) cout<<d[i]<<' ';cout<<x<<endl;return x;
}void cmp(int deep)
{int i;int x=num(deep);//cout<<(x==len)<<' '<<(deep==real_len)<<' '<<(d[0]==ans[0])<<endl;// {for (int i=0;i<deep;i++) cout<<go[d[i]]<<' ';cout<<endl;}// cout<<go[d[0]]<<' '<<go[ans[0]]<<endl;if (x>len){len=x;real_len=deep;for (i=0;i<deep;i++) ans[i]=d[i];isequal=false;}else if (x==len){if (deep<real_len){real_len=deep;for (i=0;i<deep;i++) ans[i]=d[i];isequal=false;}else if (deep==real_len){if (go[d[0]]>go[ans[0]])  //这里要注意要加go,ans[],d[]只是go的索引值 {for (i=0;i<deep;i++) ans[i]=d[i];isequal=false;}else if (go[d[0]]==go[ans[0]]) isequal=true;}}}void cmp2(int deep)
{int x=num(deep);cout<<x<<endl;if (len==0 || x>len || (x==len&&real_len>deep) || (x==len&&real_len==deep&&d[0]>ans[0])){len=x;real_len=deep;for (int i=0;i<deep;i++) ans[i]=d[i];isequal=false;}if (x==len&&real_len==deep&&d[0]==ans[0]) isequal=true;
}void dfs(int p,int sum,int deep)
{if (sum == cur){//for (int i=0;i<deep;i++) cout<<go[d[i]]<<' ';cout<<endl;cmp(deep);return;	}if (deep==4) return ;for (int i=p;i<n;i++) if (sum+go[i]<=cur){d[deep]=i;dfs(i,sum+go[i],deep+1);}
}bool comp(int a,int b)
{return a>b;
}int main()
{freopen("in","r",stdin);int i,j,k;while (cin>>go[0]){n=1;if (go[0])while (cin>>go[n]){if (go[n]) n++;else break;}sort(go,go+n,comp);while (cin>>cur,cur){len=0;real_len=0;isequal=false;dfs(0,0,0);printf("%d ",cur);if (len==0) printf("---- none\n");else if (isequal) printf("(%d): tie\n",len);else {printf("(%d):",len);for (i=real_len-1;i>=0;i--) printf(" %d",go[ans[i]]);printf("\n");}}}}


与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论