zoj 1524
#include<iostream>
#include<fstream>
#include<memory.h>
using namespace std;
int a[101];
int p[100001];
double q[100001];
double dp[2][100001];
int n,m;
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n>>m)
{
if(n==0&&m==0) return;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=m;i++)
cin>>p[i]>>q[i];
dp[1][0]=1e100;
for(j=0;j<=m;j++)
dp[0][j]=0;
for(i=1;i<=n;i++)
{
for(j=i;j<=m;j++)
{
if(j!=i)
dp[1][j]=dp[1][j-1];
else dp[1][j]=1e100;
if(a[i]==p[j])
dp[1][j]=min(dp[1][j],dp[0][j-1]+q[j]);
}
for(j=0;j<=m;j++)
dp[0][j]=dp[1][j];
}
double ans=dp[1][m];
if(ans==1e100)
cout<<"Impossible"<<endl;
else
printf("%.2lf\n",ans);
}
}
int main(){
read();
return 0;
}
#include<fstream>
#include<memory.h>
using namespace std;
int a[101];
int p[100001];
double q[100001];
double dp[2][100001];
int n,m;
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n>>m)
{
if(n==0&&m==0) return;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=m;i++)
cin>>p[i]>>q[i];
dp[1][0]=1e100;
for(j=0;j<=m;j++)
dp[0][j]=0;
for(i=1;i<=n;i++)
{
for(j=i;j<=m;j++)
{
if(j!=i)
dp[1][j]=dp[1][j-1];
else dp[1][j]=1e100;
if(a[i]==p[j])
dp[1][j]=min(dp[1][j],dp[0][j-1]+q[j]);
}
for(j=0;j<=m;j++)
dp[0][j]=dp[1][j];
}
double ans=dp[1][m];
if(ans==1e100)
cout<<"Impossible"<<endl;
else
printf("%.2lf\n",ans);
}
}
int main(){
read();
return 0;
}