首页 > 代码库 > POJ 3666 Making the Grade
POJ 3666 Making the Grade
传送门:http://poj.org/problem?id=3666
解题思路:
dp[i][j]:代表第i个数以j结尾所花的代价。。
那么dp[i][j]=fabs(a[i]-j)+min(dp[i-1][k])k<j;
实现代码:
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cmath> 6 using namespace std; 7 8 const int MAXN=2005; 9 int dp[MAXN][MAXN]; 10 int d[MAXN],a[MAXN]; 11 12 /***********************************************************13 dp[i][j]:代表第i个数以j结尾所花的代价。。 14 那么dp[i][j]=fabs(a[i]-j)+min(dp[i-1][k])k<j; 15 ***********************************************************/ 16 17 18 19 20 int main(){ 21 int n; 22 while(scanf("%d",&n)!=EOF){ 23 for(int i=1;i<=n;i++){ 24 scanf("%d",&a[i]); 25 d[i]=a[i]; 26 } 27 28 sort(d+1,d+n+1); 29 memset(dp,0,sizeof(dp)); 30 for(int i=1;i<=n;i++){ 31 int mm=dp[i-1][1]; 32 for(int j=1;j<=n;j++){ 33 mm=min(mm,dp[i-1][j]); 34 dp[i][j]=abs(a[i]-d[j])+mm; 35 } 36 } 37 38 int ans=dp[n][1]; 39 for(int i=1;i<=n;i++) 40 ans=min(ans,dp[n][i]); 41 cout<<ans<<endl; 42 } 43 return 0; 44 }
POJ 3666 Making the Grade
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。