vijos1235 天堂的饋贈

2021-08-09 19:18:57 字數 1662 閱讀 1358

題目←

狀態定義很顯然的dp題

設dp[i][j]為第i秒位於位置j所能獲得的最大禮物價值

這樣dp[i][j]可以由dp[i - 1][j - 1],dp[i - 1][j],dp[i - 1][j + 1]推來

一開始怎麼交怎麼wa,鬱悶不已

然後發現是這句話:

當禮物在某一秒末恰好到達小杉所在的格仔中,小杉就接到了這個禮物

所以。。所有到達時間是浮點數(速度不被h整除)的禮物都是接不到的……

改了就a了……

#include

#include

#include

#include

using namespace std;

const int maxn = 2000 + 50;

int w,p,h,n;

struct ztl[maxn << 1],e[maxn << 1];

int dp[2500][550];

intlast;

bool cmp(zt a,zt b)

int ans1,ans,cnt;

int main()

else

}n = cnt;

sort(l + 1,l + n + 1,cmp);

memset(dp,-1,sizeof(dp));

dp[0][p] = 0;

int p = 1;

for(int t = 1;t <= last;t ++)

for(int j = 1;j <= w;j ++)

if(j != w && dp[t - 1][j + 1] != -1)

if(dp[t - 1][j] != -1)

ans = max(ans,dp[t][j]);

}if(v)p ++;

if(l[p].arr == l[p - 1].arr)goto loop;

}printf("%d\n%d",ans,ans1);

}

其實有bug,看了題解才意識到

goto是為了處理同一時刻落下的禮物情況;

但是當同一時刻到達同一位置的禮物不止乙個的時候,這個程式只能選擇乙個;

處理方法是開陣列v[i][j],表示i時刻到達位置j的禮物的價值總和

連goto都免了……

處理後**:

#include

#include

#include

#include

#include

using namespace std;

int dp[2500][550],v[2500][550];

int a,b,c,d;

int w,p,h,n;

int ans1,ans2,cnt,last;

int main()

memset(dp,-1,sizeof(dp));

dp[0][p] = 0;

for(int i = 1;i <= last;i ++)

for(int j = 1;j <= w;j ++)

printf("%d\n%d",ans1,ans2);

return

0;}

1235 比較大小

比較大小 time limit 1000ms memory limit 65536k total submit 145 accepted 51 description 輸入兩個十進位制整數a,b,請判斷它們的大小關係。我們重新定義兩個數的大小比較規則為 誰的二進位制表示中含1的個數多誰大,若含1的個...

1235 會場安排問題

題目描述 學校的小禮堂每天都會有許多活動,有時間這些活動的計畫時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排乙個活動。現在小劉有一些活動計畫的時間表,他想盡可能的安排更多的活動,請問他該如何安排。輸入 第一行是乙個整型數m m 100 表示共有m組測...

1235 付賬問題

幾個人一起出去吃飯是常有的事。但在結帳的時候,常常會出現一些爭執。現在有 n 個人出去吃飯,他們總共消費了 s 元。其中第 i 個人帶了 a i 元。幸運的是,所有人帶的錢的總數是足夠付賬的,但現在問題來了 每個人分別要出多少錢呢?為了公平起見,我們希望在總付錢量恰好為 s 的前提下,最後每個人付的...