【noip2014 day1 t3】飛揚的小鳥
time limit:20000ms memory limit:131072k
total submit:58 accepted:14
case time limit:1000ms
description
input
output
sample input
樣例輸入1:sample output10 10 6
3 99 9
1 21 3
1 21 1
2 12 1
1 62 2
1 2 7
5 1 5
6 3 5
7 5 8
8 7 9
9 1 3
樣例輸入2:
10 10 4
1 23 1
2 21 8
1 83 2
2 12 1
2 21 2
1 0 2
6 7 9
9 1 4
3 8 10
樣例輸出1:16hint樣例輸出2:03
#include#include#include#include#include#define maxn 10005
#define maxm 1005
#define inf 1<<25
using namespace std;
int f[maxn][maxm],up[maxn],down[maxn],top[maxn],tail[maxn];
int n,m,tt,ans=0;
int main()
for(i=1;i<=tt;i++)
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
————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);//太機智了,完全揹包(以後注意都這樣寫,也算乙個優化);
NOIP2014 Day1 T2 聯合權值
noip2014 day1 t2 聯合權值 time limit 10000ms memory limit 131072k total submit 57 accepted 30 case time limit 1000ms description input output sample input...
NOIP 2014 day 1 T2 聯合權值
第一眼看起來很複雜。所以我想了個對鏈 和樹不同情況都分別處理的演算法。orz。複雜度太高最後4組t了。所以。轉換思路。聯合權值 w i w j i,j距離為2.也就是i,j中間間隔了乙個節點,所以我們在遍歷這個中間節點的時候處理。題目求最大和總和,先考慮最大,我們只需要對節點u維護乙個 max1,m...
NOIP 2014 D1T3 飛揚的小鳥
這題一開始毫無頭緒,後來發現抽象成模型後並不是很複雜 向上飛就是完全揹包,向下飛就是01揹包 但是細節方面還是比較麻煩,dp的程式好想好寫不好ac 比如說 向右飛的過程中做完全揹包,必須是0 m一起做,是乙個整體 不能只做非牆的部分 還是得深思熟慮啊tot include include inclu...