【NOIP2014 Day1 T3】飞扬的小鸟

来源:互联网 发布:圣诞装饰 知乎 编辑:程序博客网 时间:2024/05/22 10:38

【NOIP2014 Day1 T3】飞扬的小鸟

Time Limit:20000MS  Memory Limit:131072K
Total Submit:58 Accepted:14 
Case Time Limit:1000MS

Description

 

Input

 

Output

 

Sample Input

样例输入1:10 10 63 99 91 21 31 21 12 12 11 62 21 2 75 1 56 3 57 5 88 7 99 1 3样例输入2:10 10 41 23 12 21 81 83 22 12 12 21 21 0 26 7 99 1 43 8 10

Sample Output

样例输出1:16样例输出2:03

Hint

 

#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#define maxn 10005#define maxm 1005#define inf 1<<25using namespace std;int f[maxn][maxm],up[maxn],down[maxn],top[maxn],tail[maxn];int n,m,tt,ans=0;int main(){int i,j,k,t,Min=inf;bool mark;scanf("%d%d%d",&n,&m,&tt);for(i=1;i<=n;i++){scanf("%d%d",&up[i],&down[i]);top[i]=m+1;for(j=0;j<=m;j++)f[i][j]=inf;}for(i=1;i<=tt;i++){scanf("%d",&t);scanf("%d%d",&tail[t],&top[t]);}for(i=1;i<=n;i++){mark=0;for(j=0;j<=m;j++)if(j-up[i]>0)f[i][j]=min(f[i][j-up[i]]+1,min(f[i][j],f[i-1][j-up[i]]+1));for(j=max(0,m-up[i]);j<=m;j++)f[i][m]=min(f[i][j]+1,min(f[i][m],f[i-1][j]+1));for(j=0;j<=m;j++)if(j+down[i]<=m)f[i][j]=min(f[i][j],f[i-1][j+down[i]]);//for(j=1;j<=m;j++)printf("%d ",f[i][j]);//putchar(10);for(j=0;j<=tail[i];j++)f[i][j]=inf;for(j=top[i];j<=m;j++)f[i][j]=inf;//for(j=1;j<=m;j++)printf("%d ",f[i][j]);//putchar(10);for(j=tail[i]+1;j<top[i];j++)if(f[i][j]<inf){mark=1;break;}if(!mark){printf("0\n%d\n",ans);return 0;}if(top[i]!=m+1||tail[i]!=0)ans++;//printf("%d--%d\n",i,ans);}for(j=tail[n]+1;j<top[n];j++)Min=min(f[n][j],Min);printf("1\n%d\n",Min);return 0;}

————dp————

dp[i][j]=min(dp[i][j],dp[i-1][j-up[i]]+1);

1.dp[i][j]=min(dp[i][j],k*dp[i-1][j-up[i]]+1);//过不完所有数据,会超时;

2.dp[i][j]=min(dp[i][j],dp[i][j-up[i]]+1);//太机智了,完全背包(以后注意都这样写,也算一个优化);

0 0
原创粉丝点击