被虐开始

来源:互联网 发布:office mac破解版迅雷 编辑:程序博客网 时间:2024/04/29 06:03

HDU 5009

哎,自己还是太水了,感觉自己在比赛的时候感觉到了应该是要用DP的,但是不敢写呀!!!;

感觉到压力山大!!!

#include<iostream>#include<string.h>#include<vector>#include<algorithm>using namespace std;const int INF = 0x3f3f3f3f;struct  node{int val;int id;int shibie;};int dp[50005],vis[50005];vector<int>lsan;bool cmp1(node a,node b){return a.val<b.val;}bool cmp2(node a,node b){return a.id<b.id;}int  min(int a,int b){   return a<b?a:b;}int main(){int m;while(scanf("%d",&m)!=EOF){int i,j;node p[50005];for(i=1;i<=m;i++){scanf("%d",&p[i].val);p[i].id=i;}int number=1;//int number1=1;for(i=2;i<=m;i++){if(p[i].val!=p[i-1].val){   p[++number]=p[i];}}for(i=1;i<=number;i++)p[i].id=i;sort(p+1,p+number+1,cmp1);p[1].shibie=0;int  s=0;for(i=2;i<=number;i++){if(p[i].val!=p[i-1].val)s++;p[i].shibie =s;}sort(p+1,p+number+1,cmp2);//fill(dp,INF,sizeof(dp));for(i=0;i<=number;i++)dp[i]=INF;dp[0]=0;//dp[1]=1;dp[number]=number;for(i=0;i<number;i++){int cnt=0;if(dp[i]>dp[i+1])continue;for(j=i+1;j<=number;j++){if(vis[p[j].shibie]==0){                     lsan.push_back(p[j].shibie); cnt++;}vis[p[j].shibie]++;if(dp[i]+cnt*cnt>=dp[number])break;dp[j]=min(dp[j],dp[i]+cnt*cnt);//cout<<cnt<<" "<<j<<" "<<dp[j]<<" "<<endl;}for(j=0;j<lsan.size();j++)vis[lsan[j]]=0;lsan.clear();}//for(i=1;i<=number;i++)cout<<dp[number]<<endl;}} 


0 0
原创粉丝点击