博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-4283 You Are the One 区间DP
阅读量:4983 次
发布时间:2019-06-12

本文共 2509 字,大约阅读时间需要 8 分钟。

  题目链接:

  题意:n个人排队,每个人有一个权值val[i]。从第一个人开始出队,进入一个栈中,每次可以留在栈中或者从栈中移出一个,如果第 i 个人是第k个出栈的,那么有sum+=(k-1)*val[i],求是的sum最小。

  f[i][j]表示区间第 i 个人到第 j 个人sum的最小值,那么每次转移的时候我们只要枚举第 i 个人是什么时候出的栈就可以了,假设第 i 个人是第k个出的栈,那么f[i][j]=Min{ f[i+1][i+k-1]+(k-1)*num[i]+f[i+k][j]+k*(sum[j]-sum[i+k-1]) | 1<=k<=j-i+1 }。

1 //STATUS:C++_AC_0MS_276KB 2 #include 
3 #include
4 #include
5 //#include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 #include
22 #include
23 using namespace std;24 //#pragma comment(linker,"/STACK:102400000,102400000")25 //using namespace __gnu_cxx;26 //define27 #define pii pair
28 #define mem(a,b) memset(a,b,sizeof(a))29 #define lson l,mid,rt<<130 #define rson mid+1,r,rt<<1|131 #define PI acos(-1.0)32 //typedef33 typedef __int64 LL;34 typedef unsigned __int64 ULL;35 //const36 const int N=110;37 const int INF=0x3f3f3f3f;38 const int MOD=100000,STA=8000010;39 const LL LNF=1LL<<60;40 const double EPS=1e-8;41 const double OO=1e15;42 const int dx[4]={-1,0,1,0};43 const int dy[4]={ 0,1,0,-1};44 const int day[13]={ 0,31,28,31,30,31,30,31,31,30,31,30,31};45 //Daily Use ...46 inline int sign(double x){ return (x>EPS)-(x<-EPS);}47 template
T gcd(T a,T b){ return b?gcd(b,a%b):a;}48 template
T lcm(T a,T b){ return a/gcd(a,b)*b;}49 template
inline T lcm(T a,T b,T d){ return a/d*b;}50 template
inline T Min(T a,T b){ return a
inline T Max(T a,T b){ return a>b?a:b;}52 template
inline T Min(T a,T b,T c){ return min(min(a, b),c);}53 template
inline T Max(T a,T b,T c){ return max(max(a, b),c);}54 template
inline T Min(T a,T b,T c,T d){ return min(min(a, b),min(c,d));}55 template
inline T Max(T a,T b,T c,T d){ return max(max(a, b),max(c,d));}56 //End57 58 int f[N][N],sum[N],num[N];59 int T,n;60 61 int main()62 {63 // freopen("in.txt","r",stdin);64 int i,j,w,k,ca=1;65 scanf("%d",&T);66 while(T--)67 {68 scanf("%d",&n);69 sum[0]=0;70 for(i=1;i<=n;i++){71 scanf("%d",&num[i]);72 sum[i]=sum[i-1]+num[i];73 }74 for(i=1;i<=n;i++){75 for(j=i;j<=n;j++)76 f[i][j]=INF;77 }78 for(w=1;w<=n;w++){79 for(i=1;i+w-1<=n;i++){80 j=i+w-1;81 for(k=1;k<=w;k++){82 f[i][j]=Min(f[i][j],f[i+1][i+k-1]+(k-1)*num[i]83 +f[i+k][j]+k*(sum[j]-sum[i+k-1]));84 }85 }86 }87 88 printf("Case #%d: %d\n",ca++,f[1][n]);89 }90 return 0;91 }

 

转载于:https://www.cnblogs.com/zhsl/p/3304637.html

你可能感兴趣的文章
《构建之法》阅读笔记04-代码规范
查看>>
Python3+Wordcloud 实现单身相亲网站词云分析
查看>>
hdu 2105
查看>>
1309-瑞士轮-归并
查看>>
UISplitViewController-分割控件自定义分割宽度是无法实现的
查看>>
MSMQ学习
查看>>
python网络爬虫--简单爬取糗事百科
查看>>
Button类控件
查看>>
扫雷但是不会恭喜
查看>>
阳光动力2号的技术特性
查看>>
NS3网络仿真(5): 数据包分析
查看>>
Hasen的linux设备驱动开发学习之旅--时钟
查看>>
观察者模式
查看>>
python_封装redis_list方法
查看>>
nodejs 使用代理发送http/https请求
查看>>
node安装
查看>>
开发工具之IAR下载与安装
查看>>
【转】Windows 7用远程桌面(RDP+VNC)连接Ubuntu11.04
查看>>
input和textarea区别
查看>>
使用Napa开发工具创建app - 开始构建SharePoint app系列
查看>>