【Uva 10003】Cutting Sticks
2017-10-04 18:44
375 查看
【Link】:
【Description】
给你一根长度为l的棍子;
然后有n个切割点;
要求在每个切割点都要切割一下;
这样,最后就能形成n+1根小棍子了;
问你怎样切割,消耗的体力最小;
认为,消耗的体力,为每次切的那根棍子的长度;
【Solution】
在开头增加一个位置0,在结尾增加一个位点L;
这样,在算长度的时候比较好算一点;
长度不再是一点一点的了,而是一段一段的;
(即i..i+1代表了一段);
设f[i][j]表示,将i..j这一段切掉需要花费的最小体力值;
则在记忆化搜索中枚举切割点;
int dfs(int l,int r){ if (l+1>=r) return 0;//这里如果l+1==r,表示最小的一段木棍 //不能再切割了; int &ans = dp[l][r]; if (ans!=INF) return ans; for (int i = l+1;i <= r-1) ans = min(ans,dfs(l,i)+dfs(i,r)+len(l..r)); return ans; }
输出dfs(1,n+2);
【NumberOf WA】
1
【Reviw】
在赋初值的时候,忘记n加过2了..
【Code】
#include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define mp make_pair #define pb push_back #define fi first #define se second #define ms(x,y) memset(x,y,sizeof x) #define Open() freopen("F:\\rush.txt","r",stdin) #define Close() ios::sync_with_stdio(0) typedef pair<int,int> pii; typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1}; const int dy[9] = {0,0,0,-1,1,-1,1,-1,1}; const double pi = acos(-1.0); const int N = 50; int l,c[N+10],n; int dp[N+10][N+10]; int dfs(int l,int r){ if (l+1 >= r) return 0; int &ans = dp[l][r]; if (ans!=-1) return dp[l][r]; rep1(i,l+1,r-1){ if (ans==-1){ ans = dfs(l,i) + dfs(i,r) + c[r]-c[l]; }else ans = min(ans,dfs(l,i) + dfs(i,r)+c[r]-c[l]); } return ans; } int main(){ //Open(); //Close(); while (~scanf("%d",&l) && l){ rep1(i,1,N+2) rep1(j,1,N+2) dp[i][j] = -1; scanf("%d",&n); rep1(i,2,n+1) scanf("%d",&c[i]); c[1] = 0,c[n+2] = l; n+=2; printf("The minimum cutting is %d.\n",dfs(1,n)); } return 0; }
相关文章推荐
- UVA 10003 Cutting Sticks
- UVA 10003 Cutting Sticks
- UVA - 10003 Cutting Sticks
- UVA - 10003 Cutting Sticks(dp和记忆化搜索两种解法)
- UVA 10003 Cutting Sticks
- UVA 10003 - Cutting Sticks
- uva10003 - Cutting Sticks(简单动规)
- UVA - 10003 - Cutting Sticks(动态规划)
- UVA 10003 Cutting Sticks 切木棍 dp
- UVa 10003 Cutting Sticks(区间DP)
- UVA 10003 - Cutting Sticks【DP】
- UVA 10003 Cutting Sticks
- UVA 10003 - Cutting Sticks
- UVa-10003 - Cutting Sticks
- 【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)
- UVA 10003 Cutting Sticks
- uva 10003 Cutting Sticks(区间DP)
- UVa 10003 - Cutting Sticks
- UVA - 10003 Cutting Sticks
- Cutting Sticks - UVa 10003 dp