Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求数据!!!!求数据!!!!因为这道题都说输入有问题,所以我也构造不出来什么好的数据,只能在这里求数据了。 我先贴一下我的RE代码。 #include <cstdio> #include <cstring> #include <algorithm> #define N 205 using namespace std; struct Syndra { int v,next; }e[N*N]; int head[N],cnt; void add(int u,int v) { cnt++; e[cnt].v=v; e[cnt].next=head[u]; head[u]=cnt; } int n,m,ans,num[N],w[N]; int resp[N],d[N],visit[N]; char coco[N][N]; char respect[N][N][N]; char tem[N]; int f[N][N]; void dfs(int x) { num[x]=0; int i,j,k,v; for(i=1;i<=n;i++)f[x][i]=w[x]; for(i=head[x];i;i=e[i].next) { v=e[i].v; dfs(v); for(j=num[x]+num[v];j;j--) { int uplimit=min(num[v],j); for(k=max(j-num[x],0);k<=uplimit;k++) { f[x][j]=min(f[x][j],f[x][j-k]+f[v][k]); } } num[x]+=num[v]; } num[x]++; return ; } int main() { // freopen("test.in","r",stdin); int i,j,k; while(1) { scanf("%s",tem); if(tem[0]=='#')break; n=tem[0]-'0'; scanf("%d",&m); for(i=1;i<=n;i++) { scanf("%s%d",coco[i],&w[i]); resp[i]=d[i]=0; while(tem[0]=getchar(),tem[0]!='\n') { if(tem[0]==' '||tem[0]==' '||tem[0]=='\r')continue; else respect[i][++resp[i]][0]=tem[0],scanf("%s",respect[i][resp[i]]+1); } } for(i=1;i<=n;i++) { for(j=1;j<=resp[i];j++) { for(k=1;k<=n&&strcmp(coco[k],respect[i][j]);k++); add(i,k); d[j]++; } } for(i=1;i<=n;i++)if(!d[i])add(0,i); w[0]=99999999; dfs(0); for(ans=99999999,i=m;i<=n;i++)ans=min(ans,f[0][i]); printf("%d\n",ans); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator