hdu 5115 区间dp ***
题意:有n只狼,每只狼有两种属性,一种攻击力一种附加值,我们没杀一只狼,那么我们受到的伤害值为这只狼的攻击值与它旁边的两只狼的附加值的和,求把所有狼都杀光受到的最小的伤害值。
枚举中间k作为最后杀死的狼
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 10 const int INF=0x3f3f3f3f; 11 const double eps=1e-5; 12 typedef long long ll; 13 #define cl(a) memset(a,0,sizeof(a)) 14 #define ts printf("*****\n"); 15 const int MAXN=1005; 16 int n,m,tt; 17 int a[MAXN],b[MAXN],dp[MAXN][MAXN]; 18 int main() 19 { 20 int i,j,k; 21 #ifndef ONLINE_JUDGE 22 freopen("1.in","r",stdin); 23 #endif 24 scanf("%d",&tt); 25 int ca=1; 26 while(tt--) 27 { 28 scanf("%d",&n); 29 for(i=0;i<n;i++) 30 { 31 scanf("%d",a+i); 32 } 33 for(i=0;i<n;i++) 34 { 35 scanf("%d",b+i); 36 } 37 for(int d=0;d<n;d++) 38 { 39 for(i=0;i+d<n;i++) 40 { 41 j=i+d; 42 dp[i][j]=INF; 43 for(k=i;k<=j;k++) 44 { 45 dp[i][j]=min(dp[i][j],dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1]); 46 } 47 } 48 } 49 printf("Case #%d: %d\n",ca++,dp[0][n-1]); 50 } 51 }