<span style="font-size:18px;">#include<iostream> #include<cstdio> #include<climits> #include<cstring> using namespace std; int dp[110][210],dis,t,n; int d[110],p[110]; char str[100]; void input() { gets(str); n=0; d[0]=0; sscanf(str,"%d",&dis); while(gets(str)!=NULL) { if(str[0]=='\0') return; ++n; sscanf(str,"%d %d",&d[n],&p[n]); if(d[n]>dis) n--; } } void solve() { for(int i=0;i<=n;i++) for(int j=0;j<=200;j++) dp[i][j]=INT_MAX; dp[0][100]=0; for(int i=1;i<=n;i++) { int w=d[i]-d[i-1]; for(int j=0;j+w<=200;j++) if(dp[i-1][j+w]!=INT_MAX) dp[i][j]=dp[i-1][j+w]; for(int j=0;j<=200;j++) for(int k=0;k<=j;k++) { if(j-k+w<=200&&dp[i-1][j-k+w]!=INT_MAX) { dp[i][j]=min(dp[i][j],dp[i-1][j-k+w]+k*p[i]); } } } if(dis-d[n]>100||dp[n][100+dis-d[n]]==INT_MAX) printf("Impossible\n"); else printf("%d\n",dp[n][100+dis-d[n]]); } int main() { int t; gets(str); sscanf(str,"%d",&t); gets(str); while(t--) { input(); solve(); if(t) printf("\n"); } return 0; }</span>
时间: 2024-10-03 14:06:11