HDU 4504 威威猫系列故事——篮球梦
2013-03-28 21:14
183 查看
题目大意:对于当前局势:比分A : B,还剩T时间,我方有三种得分方式:得1分,得2分,得3分;对手每次只能得1分,每次进攻耗时15秒,不足15秒不得进攻。
鉴于前面的几题DP,所以一看到有想到DP了(为什么?为什么?因为我方得分方式描述很容易想到状态转移方程),那么根据计算,我方最多进攻20次,就算每次得3分,那也只是20*60的状态量,good~很容易就ko。
鉴于前面的几题DP,所以一看到有想到DP了(为什么?为什么?因为我方得分方式描述很容易想到状态转移方程),那么根据计算,我方最多进攻20次,就算每次得3分,那也只是20*60的状态量,good~很容易就ko。
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #define maxn using namespace std; long long dp[26][70]; //dp[i][j]代表我方第i轮得到j分的种类数 void init() { memset(dp,0,sizeof(dp)); dp[1][1]=dp[1][2]=dp[1][3]=1; for(int i=2;i<=20;i++) { for(int j=1;j<=60;j++) { if(j>1)dp[i][j]+=dp[i-1][j-1]; if(j>2)dp[i][j]+=dp[i-1][j-2]; if(j>3)dp[i][j]+=dp[i-1][j-3]; } } } int main() { int A,B,t; init(); //dp计算所有的可能性 while(~scanf("%d%d%d",&A,&B,&t)) { int k = t / 15; int ta = (k + 1)/2; int tb = k - ta; //这里坑了我好惨啊 if(ta==0) { if(A>B) puts("1"); //这里太坑了 else puts("0"); continue; } B += tb; int diff = B - A + 1; //分差 if(diff < 0) diff = 0; long long ans = 0; for(int i=diff;i<=ta*3;i++) { ans += dp[ta][i]; } printf("%I64d\n",ans); } system("pause"); return 0; }
相关文章推荐
- hdu 4504 威威猫系列故事——篮球梦
- HDU 4504 威威猫系列故事——篮球梦(背包最优方案数)
- HDU-4504 威威猫系列故事——篮球梦
- hdu 4504威威猫系列故事——篮球梦
- HDU 4504 威威猫系列故事——篮球梦
- HDU 4504 威威猫系列故事——篮球梦(DP)#by zh
- hdu 4504 威威猫系列故事——篮球梦(组合中dp的应用)
- HDU 4504 威威猫系列故事——篮球梦(dp)
- 2013腾讯编程马拉松初赛第〇场(HDU 4504)威威猫系列故事——篮球梦
- 2013腾讯编程马拉松初赛第〇场(HDU 4504)威威猫系列故事——篮球梦
- hdu_4504_威威猫系列故事——篮球梦
- HDU 威威猫系列故事——篮球梦
- HDU 威威猫系列故事——篮球梦
- HDU 4504 威威猫系列故事――篮球梦 母函数&DP
- HDUOJ----4504 威威猫系列故事——篮球梦
- HDU--杭电--4504--威威猫系列故事——篮球梦--DP
- 2013腾讯编程马拉松初赛第〇场(3月20日)HDOJ 4504 威威猫系列故事——篮球梦
- hdu 4504 威威猫系列故事——篮球梦 (递推)
- HDU--杭电--4504--威威猫系列故事——篮球梦--DP
- hdu 4504 威威猫系列故事——篮球梦_简单dp