QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#807422 | #9802. Light Up the Grid | codingforchinese | RE | 0ms | 0kb | C++14 | 5.1kb | 2024-12-09 23:04:58 | 2024-12-09 23:04:59 |
answer
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1000100;
const int inf=0x3f3f3f3f3f3f3f3f;
int m,cnt,a[N],dis[20][20],dp[20][100010];
int a0,a1,a2,a3;
void update(int i,int j,int d)
{
dis[i][j]=min(dis[i][j],d);
dis[i][j]=min(dis[j][i],d);
}
string s1;
string s2;
signed main()
{
int T;
cin>>T>>a0>>a1>>a2>>a3;
int mi=min(a0,min(a1,min(a2,a3)));
for(int i=0;i<16;i++)
{
for(int j=0;j<16;j++)
{
if(i!=j)dis[i][j]=inf;
else dis[i][j]=mi*2;
}
}
for(int i=0;i<16;i++)
{
update(i,i^1,a0);
update(i,i^2,a0);
update(i,i^4,a0);
update(i,i^8,a0);
update(i,i^12,a1);
update(i,i^3,a1);
update(i,i^10,a2);
update(i,i^5,a2);
update(i,i^15,a3);
}
for(int k=0;k<16;k++)
{
for(int i=0;i<16;i++)
{
for(int j=0;j<16;j++)
{
if(dis[i][j]>dis[i][k]+dis[k][j])
{
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
for(int i=0;i<16;i++)
{
for(int j=0;j<(1<<16);j++)
{
dp[i][j]=inf;
}
}
dp[0][0]=0;
for(int i=1;i<(1<<16);i++)
{
for(int j=0;j<16;j++)
{
if((i&(1<<j))!=0)
{
if(i==(1<<j))
{
dp[i][j]=dis[j][0];
continue;
}
for(int k=0;k<16;k++)
{
if(j==k)continue;
if((i&(1<<k))==0)continue;
if(dp[k][i^(1<<j)]>=inf)continue;
dp[j][i]=min(dp[j][i],dp[k][i^(1<<j)]+dis[k][j]);
}
}
}
}
while(T--)
{
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>s1;
cin>>s2;
s1=" "+s1;
s2=" "+s2;
a[i]=(s1[1]-'0')*8+(s1[2]-'0')*4+(s2[1]-'0')*2+(s2[2]-'0');
a[i]^=15;
}
int ed=0;
for(int i=1;i<=m;i++)
{
ed+=(1<<a[i]);
}
int ans=inf;
for(int i=1;i<=m;i++)
{
ans=min(ans,dp[a[i]][ed]);
}
cout<<ans<<"\n";
}
}
// const int N=12;
// const int M=10*10;
// int n,m;
// int f[N][M][1<<N];
// vector<int>head[1<<N];
// vector<int>state;
// int cnt[1<<N];
// bool check(int s)
// {
// for(int i=0;i<n;i++)
// if((s>>i&1)&&(s>>i+1&1))return false;
// return true;
// }
// void count(int s)
// {
// for(int i=0;i<n;i++)
// {
// cnt[s]+=(s>>i&1);
// }
// }
// signed main()
// {
// cin>>n>>m;
// for(int i=0;i<1<<n;i++)
// {
// if(check(i))
// {
// state.push_back(i);
// count(i);
// }
// }
// for(int i:state)
// {
// for(int j:state)
// {
// if((i&j)==0&&check(i|j))
// {
// head[i].push_back(j);
// }
// }
// }
// f[0][0][0]=1;
// for(int i=1;i<=n+1;i++)
// {
// for(int j=0;j<=m;j++)
// {
// for(int now:state)
// {
// if(cnt[now]>j)continue;
// for(int pre:head[now])
// {
// f[i][j][now]+=f[i-1][j-cnt[now]][pre];
// }
// }
// }
// }
// cout<<f[n+1][m][0];
// }
// #define y1 Hi
// const int N=21,inf=0x3f3f3f3f;
// int n,x1,y1,x2,y2;
// int f[2][65][N][N][N][N];
// int dx[]={-1,1,0,0};
// int dy[]={0,0,-1,1};
// int dfs(bool player,int cnt,int x1,int y1,int x2,int y2)
// {
// if(~f[player][cnt][x1][y1][x2][y2])
// {
// return f[player][cnt][x1][y1][x2][y2];
// }
// if(cnt>3*n)
// {
// return f[player][cnt][x1][y1][x2][y2]=inf;
// }
// if(x1==x2&&y1==y2)
// {
// return f[player][cnt][x1][y1][x2][y2]=(player?0:inf);
// }
// int res;
// if(player)
// {
// res=-1;
// for(int i=0;i<4;i++)
// {
// int xx=x1+dx[i];
// int yy=y1+dy[i];
// if(xx<1||xx>n||yy<1||yy>n)continue;
// res=max(res,dfs(0,cnt+1,xx,yy,x2,y2));
// }
// }
// else
// {
// res=inf;
// for(int i=0;i<4;i++)
// {
// for(int j=1;j<=2;j++)
// {
// int xx=x2+j*dx[i];
// int yy=y2+j*dy[i];
// if(xx<1||xx>n||yy<1||yy>n)continue;
// res=min(res,dfs(1,cnt+1,x1,y1,xx,yy));
// }
// }
// }
// return f[player][cnt][x1][y1][x2][y2]=res+1;
// }
// signed main()
// {
// memset(f,-1,sizeof f);
// cin>>n>>x1>>y1>>x2>>y2;
// if(abs(x1-x2)+abs(y1-y2)==1)
// cout<<"WHITE 1";
// else cout<<"BLACK "<<dfs(1,0,x1,y1,x2,y2)<<"\n";
// }
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Runtime Error
input:
2 1000 100 10 1 4 10 00 01 00 00 10 00 01 1 11 11