poj 1946 Cow Cycl…
来源:互联网 发布:aes256算法 java实现 编辑:程序博客网 时间:2024/05/18 01:53
这个题目关键是状态的设计
if(a>b)return(a); return(b);
scanf("%d %d%d",&n,&e,&d); memset(dp,0,sizeof(dp)); ans=0; for(int i=0;;i++) { for(int j=1;j<=n;j++) for(int k=0;k<=e;k++) { intsum=dp[i][j][k]; for(intp=1;p*p<=k;p++) { dp[i+1][j][k-p*p]=max(dp[i+1][j][k-p*p],dp[i][j][k]+p); if(dp[i+1][j][k-p*p]>=d) ans=i+1; } if(j+1<=n) for(intp=1;p*p+sum<=e;p++) { dp[i+1][j+1][e-p*p-sum]=max(dp[i+1][j+1][e-p*p-sum],dp[i][j][k]+p); if(dp[i+1][j+1][e-p*p-sum]>=d) ans=i+1; } } if(ans) break; }
printf("%d\n",ans); return 0;
别的就很好想了
dp[i][j][k]表示过了i分钟,第j头牛领头,剩余k能量时能跑的最远距离
然后这个题目还是有些关键点的,就是领头的牛领头跑完之后就可以掉队(这样的策略保证能得到最优解)。
有了这一点才有上面的状态设计。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int n,e,d;
int dp[101][21][101];
int ans;
int max(int a,int b)
{
}
int main()
{
// for(inti=1;i<=ans;i++)
// for(intj=1;j<=n;j++)
// for(intk=1;k<=e;k++)
// printf("%d %d %d%d\n",i,j,k,dp[i][j][k]);
}
- poj 1946 Cow Cycl…
- poj 2184 Cow Exhibition
- poj 3660 Cow Contest
- POJ 3660 Cow Contest(关系闭包…
- POJ 3278 Catch That Cow
- poj 2184 Cow Exhibition(0/1背包…
- ZOJ 1060 (POJ 1094) Sorting It …
- POJ 1005 I Think I Need a Houseb…
- ZZULI_SummerPractice(3) POJ 12…
- POJ 2594 Treasure Exploration(…
- poj 2421 Constructing Roads mst(…
- poj 1135 Domino Effect 单源最短…
- poj 1980 Unit Fraction Partition…
- poj 3280 Cheapest Palindrome dp(…
- poj 2239 Selecting Courses (最大…
- poj 3160 Father Christmas flymou…
- poj 3177 Redundant Paths (双连…
- poj 2455 Secret Milking Machine…
- poj 2096 Collecting Bugs 期望dp
- poj 1141 Brackets Sequence dp
- poj 1038 动态规划(dp)
- LDA整体流程
- poj 1848 Tree 树型dp
- poj 1946 Cow Cycl…
- poj 3356 AGTC dp 最短编辑距离
- poj 1080 Human Gene Functions dp
- poj 3034 Whac-a-Mole dp
- 求高手请进,帮我分析这种情况是什么原因
- poj 3280 Cheapest Palindrome dp(…
- poj 2948 Martian Mining dp
- poj 1691 Painting A Board
- poj 3670 Eating Together