@Alpacadh
2019-02-23T08:23:19.000000Z
字数 3644
阅读 775
dp
//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<string.h>#include<stdio.h>#include<cstdlib>#include<cstdio>using namespace std;const int inf=0x3f3f3f3f;const int N=250+5;const double eps=1e-4;typedef long long ll;typedef pair<int,ll> pil;int dp[N][N];int t[N];bool h[2*N][N][2];int main(){int n;int tot=1;while(~scanf("%d",&n)){if(n==0)break;int T;memset(h,0,sizeof(h));memset(t,0,sizeof(t));memset(dp,0,sizeof(dp));scanf("%d",&T);for(int i=1;i<n;i++)dp[T][i]=inf;dp[T][n]=0;for(int i=1;i<n;i++)scanf("%d",&t[i]);int tep,m1,m2;scanf("%d",&m1);for(int i=1;i<=m1;i++){scanf("%d",&tep);for(int j=1;j<=n;j++){h[tep][j][0]=1;tep+=t[j];}}scanf("%d",&m2);for(int i=1;i<=m2;i++){scanf("%d",&tep);for(int j=n;j>=1;j--){h[tep][j][1]=1;tep+=t[j-1];}}for(int i=T-1;i>=0;i--){for(int j=1;j<=n;j++){dp[i][j]=dp[i+1][j]+1;if(j<n&&i+t[j]<=T&&h[i][j][0])dp[i][j]=min(dp[i][j],dp[i+t[j]][j+1]);if(j>1&&i+t[j-1]<=T&&h[i][j][1])dp[i][j]=min(dp[i][j],dp[i+t[j-1]][j-1]);}}printf("Case Number %d: ",tot++);if(dp[0][1]>=inf)printf("impossible\n");elseprintf("%d\n",dp[0][1]);}return 0;}
//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<string.h>#include<stdio.h>#include<cstdlib>#include<cstdio>using namespace std;const int inf=0x3f3f3f3f;const int N=250+5;const double eps=1e-4;typedef long long ll;typedef pair<int,ll> pil;int dp[N];struct po{int x,y,z;}p[N];bool cmp(po a,po b){return a.x*b.y<b.x*b.y;}int cnt;void add(int x,int y,int z){p[cnt].x=x;p[cnt].y=y;p[cnt++].z=z;p[cnt].x=x;p[cnt].y=z;p[cnt++].z=y;p[cnt].x=y;p[cnt].y=x;p[cnt++].z=z;p[cnt].x=y;p[cnt].y=z;p[cnt++].z=x;p[cnt].x=z;p[cnt].y=x;p[cnt++].z=y;p[cnt].x=z;p[cnt].y=y;p[cnt++].z=x;}int main(){int tot=1;int n;while(scanf("%d",&n)){if(n==0)break;cnt=0;for(int i=0;i<n;i++){int x,y,z;scanf("%d%d%d",&x,&y,&z);add(x,y,z);}sort(p,p+cnt,cmp);memset(dp,0,sizeof(dp));int ma=-inf;for(int i=0;i<cnt;i++){dp[i]=p[i].z;for(int j=0;j<i;j++){if(p[i].x>p[j].x&&p[i].y>p[j].y)dp[i]=max(dp[i],dp[j]+p[i].z);}ma=max(ma,dp[i]);}printf("Case %d: maximum height = %d\n",tot++,ma);}return 0;}
//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<cmath>#include<cstring>#include<string.h>#include<stdio.h>#include<cstdlib>#include<cstdio>using namespace std;const int inf=0x3f3f3f3f;const int N=200+5;const double eps=1e-4;typedef long long ll;typedef pair<int,ll> pil;int dp[N][N];int a[N][N];int path[N][N];int main(){int n,m;while(~scanf("%d%d",&n,&m)){int ans=inf;memset(a,0,sizeof(a));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);}}memset(dp,inf,sizeof(dp));for(int i=1;i<=n;i++)dp[i][m]=a[i][m];for(int i=m;i>=2;i--){for(int j=1;j<=n;j++){int rows[3]={j-1,j,j+1};if(j==1)rows[0]=n;else if(j==n)rows[2]=1;sort(rows,rows+3);for(int k=0;k<3;k++){int temp=dp[j][i]+a[rows[k]][i-1];if(temp<dp[rows[k]][i-1]){dp[rows[k]][i-1]=temp;path[rows[k]][i-1]=j;}}}}int cnt;for(int i=1;i<=n;i++){if(dp[i][1]<ans)ans=dp[i][1],cnt=i;}printf("%d",cnt);for(int j=1,i=path[cnt][j];j<m;j++,i=path[i][j])printf(" %d",i);printf("\n");printf("%d\n",ans);}return 0;}