Codeforces Round #433 (Div. 1) D. Michael and Charging Stations(dp)
2017-09-07 19:28
417 查看
题目链接:Codeforces Round #433 (Div. 1) D. Michael and Charging Stations
题意:
一个人每天要加油,1种为1000,1种为2000,如果付全额,会得到10%的回扣放在卡上。
如果卡上有剩余的回扣,可以拿来抵现金。问n天最少需要花多少钱。
题解:
很直观的一个dp就是考虑dp[i][j],表示第i天卡上剩余回扣为j的最小花费。
将所有的数除以100后,j其实是小于40的,严格的说是小于30,官方题解有个证明。
因为卡上不可能积累很多的钱,积累很多,显然会提前拿去抵现金。
所以把j限制在40以内就行了。
然后用滚动数组滚一下,状态转移方程看代码
1 #include<bits/stdc++.h> 2 #define F(i,a,b) for(int i=a;i<=b;++i) 3 using namespace std; 4 5 const int N=3e5+7,inf=1e9+7; 6 int a ,dp[2][50],now,n; 7 8 void gmin(int &a,int b){if(a>b)a=b;} 9 10 int main() 11 { 12 scanf("%d",&n); 13 F(i,1,n)scanf("%d",a+i),a[i]/=100; 14 now=0;F(i,1,40)dp[now][i]=inf; 15 F(i,1,n) 16 { 17 now^=1;F(j,0,40)dp[now][j]=inf; 18 F(j,0,40) 19 { 20 gmin(dp[now][j+a[i]/10],dp[now^1][j]+a[i]);//付全额 21 gmin(dp[now][j-a[i]+max(a[i]-j,0)],dp[now^1][j]+max(a[i]-j,0));//抵现金 22 } 23 } 24 int ans=inf; 25 F(i,0,40)gmin(ans,dp[now][i]); 26 printf("%d00\n",ans); 27 return 0; 28 }View Code
相关文章推荐
- 解题报告:Codeforces Round #433 (Div. 1) D. Michael and Charging Stations (DP)
- cf 853 D Michael and Charging Stations [dp]
- CF 853D Michael and Charging Stations
- Codeforces Round #341 (Div. 2) problemE Wet Shark and Blocks 矩阵乘法 dp
- Codeforces Round #358 (Div. 2) D. Alyona and Strings dp
- Codeforces Round #358 (Div. 2)-C. Alyona and the Tree(树形dp)
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) B. Bear and Blocks dp
- Codeforces Round #358 (Div. 2) D Alyona and Strings(DP)
- Codeforces Round #293 (Div. 2) D. Ilya and Escalator(概率DP)
- Codeforces Round #343 (Div. 2) C. Famil Door and Brackets(简单dp)
- Codeforces Round #264 (Div. 2) D. Gargari and Permutations 多序列LIS+dp好题
- Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] C. Weakness and Poorness 三分 dp
- Codeforces Round #371 (Div. 1) C. Sonya and Problem Wihtout a Legend(贪心+DP)
- Codeforces Round #210 (Div. 1) B. Levko and Array(dp 思维)
- 树形dp - Codeforces Round #322 (Div. 2) F Zublicanes and Mumocrates
- Codeforces Round #275 (Div. 1) D Random Function and Tree 树形dp
- 【Codeforces Round #442 (Div. 2)】 B. Nikita and string (线性状态dp)
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2)-B - Bear and Compressing-暴力DP
- Codeforces Round #416 (Div. 2) C. Vladik and Memorable Trip(dp)
- Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi dp,组合数学