UVA - 662 Fast Food
2015-04-15 21:52
281 查看
怎么说呢,我一直希望自己能独立的想出从没见过的类型的题目,但基本上从来没有过,究竟是自己不够聪明还是说这就是变聪明的过程??但除了第二个答案我别无选择。。。
首先要想清楚一段restruant只有取中间的那个才有可能取得最小值,以这个为基础,(当然,一开始实在想不通怎么状态转移),dp[i][j]表示前i个取j个的最小值,如果直接n*k复杂度遍历,显然无法得到解,就只好再枚举最后一段的长度,这样所有可能的状态都能涉及到了
restruant单复数搞错了,wa了几次TT
首先要想清楚一段restruant只有取中间的那个才有可能取得最小值,以这个为基础,(当然,一开始实在想不通怎么状态转移),dp[i][j]表示前i个取j个的最小值,如果直接n*k复杂度遍历,显然无法得到解,就只好再枚举最后一段的长度,这样所有可能的状态都能涉及到了
restruant单复数搞错了,wa了几次TT
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #define MAXN 210 #define MAXK 35 #define INF 0x7f7f7f7f7f7f7f7f using namespace std; long long n,k,s[MAXN],sum[MAXN][MAXN],dp[MAXN][MAXK]; void init(){ memset(sum,0,sizeof(sum)); for(int i=0;i<=n;i++){ for(int j=0;j<=k;j++){ dp[i][j]=INF; } } dp[0][0]=0;//只有前0个取0是合法的,其他的取0 都是不合法的 } void print(int which,int last,int all){ if(which==0) return ; for(int i=last-1;i>=0;i--){ //cout<<i<<" "<<which<<" "<<last<<" "<<dp[i][which-1]<<" "<<sum[i+1][last]<<" "<<all<<endl; if(dp[i][which-1]+sum[i+1][last]==all){ // cout<<"which"<<which<<endl; print(which-1,i,dp[i][which-1]); if(i+1==last){ cout<<"Depot "<<which<<" at restaurant "<<last<<" serves restaurant "<<last<<endl; } else{ cout<<"Depot "<<which<<" at restaurant "<<(i+1+last)/2<<" serves restaurants "<<i+1<<" to "<<last<<endl; } break; } } } int main(){ int cases=1; while(cin>>n>>k&&n+k){ init(); for(int i=1;i<=n;i++){ cin>>s[i]; } for(int l=2;l<=n;l++){ for(int i=1;i<=n-l+1;i++){ int j=i+l-1,t=(i+j)>>1; for(int p=i;p<=j;p++) sum[i][j]+=abs(s[p]-s[t]); } } for(int i=1;i<=n;i++){ for(int j=1;j<=i&&j<=k;j++){ for(int t=j-1;t<i;t++){ // cout<<"sum"<<sum[t+1][i]; dp[i][j]=min(dp[i][j],dp[t][j-1]+sum[t+1][i]); } } } cout<<"Chain "<<cases++<<endl; print(k,n,dp [k]); cout<<"Total distance sum = "<<dp [k]<<endl<<endl; } return 0; }
相关文章推荐
- uva 662 Fast Food
- uva 662 Fast Food (dp)
- 小白dp uva 662 - Fast Food (除夕夜的博客 ^ ^)
- dp( UVa 662 Fast Food )
- uva 662 - Fast Food
- UVA662- Fast Food
- UVA 662 Fast Food(DP)
- uva 662 - Fast Food(dp)
- UVa 662 - Fast Food
- UVA 662 Fast Food(dp)
- Fast Food - UVa 662 dp
- UVA - 662 Fast Food 区间DP
- UVA 662 Fast Food
- UVA 662 Fast Food(dp)
- DP(递归打印路径) UVA 662 Fast Food
- uva_662 - Fast Food( 区间DP )
- 662 - Fast Food
- 662 - Fast Food
- 662 - Fast Food
- UVA 662 Fast Food 区间DP