原题链接:http://acm.uestc.edu.cn/problem.php?pid=1369&cid=192
分析:DP,dp[i][0]表示第i个人不是lover时的最小值,dp[i][1]表示是的情况.
I'm Hungry
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<functional> 7 #define maxn 100005 8 using namespace std; 9 int num[maxn],dp[maxn][2]; 10 int main() 11 { 12 int T,n,cas=1; 13 scanf("%d",&T); 14 while(T--) 15 { 16 scanf("%d",&n); 17 for(int i=0;i<n;i++) 18 scanf("%d",&num[i]); 19 dp[0][0]=num[0];dp[0][1]=num[0]; 20 for(int i=1;i<n;i++) 21 { 22 dp[i][0]=num[i]+min(dp[i-1][0],dp[i-1][1]); 23 dp[i][1]=dp[i-1][0]-num[i-1]+40; 24 } 25 int ans=min(dp[n-1][0],dp[n-1][1]); 26 printf("Case #%d: %d ",cas++,ans); 27 } 28 return 0; 29 }