UVA - 10913 Walking on a Grid
2015-05-20 19:32
309 查看
简单dp。由于只能横着走和向下走以及每个格子只能走一次。可以枚举i,j 这个位置时,下一行应该在哪个位置
核心部分冗余度很高,但想不出0冗余又不会增加复杂度的办法。。。干脆就直接把代码复制一边然后改个循环
核心部分冗余度很高,但想不出0冗余又不会增加复杂度的办法。。。干脆就直接把代码复制一边然后改个循环
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 76 #define MAXK 6 using namespace std; int n,k; int s[MAXN][MAXN],dp[MAXN][MAXN][MAXK],vis[MAXN][MAXN][MAXK]; void init(){ memset(vis,0,sizeof(vis)); int count=0,all=0; for(int i=n;i>=1;i--){ if(s [i]<0) count++; if(count>k) break; all+=s [i]; dp [i][count]=all; vis [i][count]=1; } } int main(){ int cases=1; while(cin>>n>>k&&n+k){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>s[i][j]; init(); for(int i=n-1;i>=1;i--){ int count,all; for(int j=1;j<=n;j++){ count=0,all=0; for(int t=j;t>=1;t--){ if(s[i][t]<0)count++; if(count>k)break; all+=s[i][t]; for(int p=0;p+count<=k;p++){ if(vis[i+1][t][p]){ if(vis[i][j][p+count]) dp[i][j][p+count]=max(dp[i][j][p+count],dp[i+1][t][p]+all); else{ dp[i][j][p+count]=dp[i+1][t][p]+all; vis[i][j][p+count]=1; } } } } count=0,all=0; for(int t=j;t<=n;t++){ if(s[i][t]<0)count++; if(count>k)break; all+=s[i][t]; for(int p=0;p+count<=k;p++){ if(vis[i+1][t][p]){ if(vis[i][j][p+count]) dp[i][j][p+count]=max(dp[i][j][p+count],dp[i+1][t][p]+all); else{ dp[i][j][p+count]=dp[i+1][t][p]+all; vis[i][j][p+count]=1; } } } } } } int flag=0,ans; for(int i=0;i<=k;i++){ if(vis[1][1][i]){ if(flag==0) ans=dp[1][1][i]; else ans=max(ans,dp[1][1][i]); flag=1; } } cout<<"Case "<<cases++<<": "; if(flag) cout<<ans<<endl; else cout<<"impossible"<<endl; } return 0; }
相关文章推荐
- UVA 10913 - Walking on a Grid (记忆化搜索)
- Walking on a Grid - UVa 10913 dp
- uva 10913 Walking on a Grid
- UVA 10913 Walking on a Grid(记忆化搜索)
- uva 10913 - Walking on a Grid
- UVa 10913 - Walking on a Grid dp
- uva 10913 - Walking on a Grid(记忆化)
- UVA 10913 Walking on a Grid
- UVa 10913 - Walking on a Grid dp
- uva_10913 - Walking on a Grid( 普通DP )
- uva 10913 Walking on a Grid
- uva 10913 Walking on a Grid
- Uva 10913 - Walking on a Grid
- uva 10913 Walking on a Grid
- UVA 10913 Walking on a Grid
- UVA - 10913 Walking on a Grid
- UVa 10913 - Walking on a Grid(dp递推变形)
- uva 10913 Walking on a Grid
- UVA 10913 Walking on a Grid(记忆化搜索)
- uva 10913 - Walking on a Grid(记忆化)