hdu 4152 dfs 枚举

基本功不够扎实 dubug 了好久

View Code
#include<cstdio>
#include<cstring>
int h[50][50];
int a[50];
int sum[50];
int ans[50];
int re[50];
int n,m;
int tot;
bool goal;
void dfs(int dep,int p)
{
int i,j;
goal=true;
for(i=1;i<=n;i++)
if(sum[i]<a[i])
goal=false;
if(goal && dep>tot)
{
tot=dep;
for(i=1;i<dep;i++)
{
ans[i]=re[i];
}
}
if(dep==m+1) return ;
for(j=p;j<=m;j++)
{
re[dep]=j;
for(i=1;i<=n;i++) sum[i]+=h[j][i];
dfs(dep+1,j+1);
for(i=1;i<=n;i++) sum[i]-=h[j][i];
}
}
int main()
{
int i,j;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++) scanf("%d",&a[i]);
scanf("%d",&m);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&h[i][j]);
memset(sum,0,sizeof(sum));
tot=0;
dfs(1,1);
if(tot>1)
{
printf("%d",tot-1);
for(i=1;i<tot;i++)
printf(" %d",ans[i]);
printf("\n");
}
else printf("0\n");
}
return 0;
}



posted @ 2011-12-21 11:17  Because Of You  Views(283)  Comments(0Edit  收藏  举报