http://acm.hdu.edu.cn/showproblem.php?pid=3269
09宁波。
模拟题。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <queue>
//#include <time1.h>
#include <list>
#include <stack>
using namespace std;
#define N 25
#define M 1005
int n,time1,k,size,m;
int a[N][N];
bool ser[N];
struct machine
{
int begt,v;
bool work[M];
}ma[N];
void init()
{
int i,j,m1,p,q;
scanf("%d%d",&n,&time1);
scanf("%d%d",&k,&size);
for (i=1;i<=n;i++) ma[i].v=0;
memset(ser,false,sizeof(ser));
for (i=1;i<=k;i++)
{
scanf("%d",&j);
ser[j]=true;
ma[j].v=size;
}
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for (i=1;i<=n;i++)
{
for (j=1;j<=time1;j++) ma[i].work[j]=false;
scanf("%d",&m1);
for (j=1;j<=m1;j++)
{
scanf("%d%d",&p,&q);
p++;
for (int kk=p;kk<=q;kk++) ma[i].work[kk]=true;
}
}
scanf("%d",&m);
for (i=1;i<=m;i++)
{
scanf("%d%d",&p,&q);
ma[q].begt=p+1;
}
}
int main()
{
//freopen("a","r",stdin);
int T,i,j,kk;
scanf("%d",&T);
while(T--)
{
init();
for (i=1;i<=time1;i++)
{
for (j=1;j<=n;j++)
if (!ser[j] && i>=ma[j].begt && ma[j].work[i])
{
for (kk=1;kk<=n;kk++)
if (kk!=j && ser[kk] && ma[kk].work[i]) ma[j].v+=a[kk][j];
}
for (j=1;j<=m;j++)
if (ma[j].v>=size)
{
ser[j]=true;
ma[j].v=size;
}
}
for (i=1;i<=n;i++) printf("%d%%\n",(ma[i].v*100)/size);
}
return 0;
}