時間限制:c/c++
1秒,其他語言2秒
空間限制:c/c++
1048576k,其他語言2097152k
64bit io format:
%lld
弱弱有兩個屬性a和b,這兩個屬性初始的時候均為0,每一天他可以通過努力,讓a漲1點或b漲1點。輸出描述:為了激勵弱弱努力學習,我們共有n種獎勵,第i種獎勵有xi,yi,zi三種屬性,若a≥ xi且b≥
yi,則弱弱在接下來的每一天都可以得到zi的分數。 問m天以後弱弱最多能得到多少分數。 輸入描述: 第一行乙個兩個整數n和m(1≤ n≤
1000,1≤ m≤ 2000000000)。 接下來n行,每行三個整數xi,yi,zi(1≤ xi,yi≤ 1000000000,1≤
zi ≤ 1000000)。
一行乙個整數表示答案。
示例1輸入
複製
242
11012
20
輸出
複製
50
備註:
在樣例中,弱弱可以這樣規劃:第一天a漲1,第二天b漲1,第三天b漲1,第四天a漲1。 共獲得0+0+20+30=50分。dp [ i ] [ j ]表示在sum = i+j天,兩種屬性分別是i和j所得到的分數(一共)
根據題意可得:
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j]
a[i][j]表示屬性分別是i和j可獲得大分數(當天)
那a[i][j]是怎麼得到的?
我們用二維字首和的思想來實現:
a[ xi ][ xj ]=z
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1]
整合一下最後答案就是:
dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j]
ans=max(ans,dp[i][j]+(m-i-j)*a[i][j])
如果我們在這一天可以獲得a的分數,那之後的每一天都可以獲得,在此之後還有(m-i-j)天,所以直接加上這個分數在以後天數獲得的總和
本題的xi,yi,m都比較大記得要先離散化。
#include
using
namespace std;
const
int maxn=
1400
;int dp[maxn]
[maxn]
;int a[maxn]
[maxn]
;int x[maxn]
,y[maxn]
,z[maxn]
;int b[maxn]
,c[maxn]
;int
main()
sort
(b+1
,b+1
+n);
sort
(c+1
,c+1
+n);
int ant1=
unique
(b+1
,b+1
+n)-b-1;
int ant2=
unique
(c+1
,c+1
+n)-c-1;
for(
int i=
1;i<=n;i++
)for
(int i=
1;i<=ant1;i++
)for
(int j=
1;j<=ant2;j++
)for
(int i=
1;i<=ant1;i++
)for
(int j=
1;j<=ant2;j++
)for
(int i=
1;i<=ant1;i++
)for
(int j=
1;j<=ant2;j++
) cout
}
Go每日一題 6
以下 是否編譯通過 package main import fmt type myint1 inttype myint2 int func main 輸出結果 編譯不通過,cannot use i type int as type myint1 in assignment。myint1 和 myin...
每日一題30 拓補排序
所謂拓補排序就是確定圖中節點的一種順序,使得某些在別的節點訪問之前不能訪問到的節點排在後面。所以該演算法的核心是每一步選擇乙個沒有入度的節點,因為沒有入度意味著該節點沒有前驅,得到乙個節點後,就把以新得到的節點為起點的邊去除,從剩下的節點重複前面的過程直到所有節點都排好序或找不到乙個不具有入度的節點...
7月18日國盟CRISC每日一題
以下哪一項是執行週期性風險評估的最重要原因?a.風險評估有時不夠精確。b.審核人員可以優化和降低控制成本。c.週期性風險評估可以向高階管理層展示風險管理職能的價值。d.業務風險會不斷變化 答案與解析 d a.雖然評估永遠不夠完善,並且總會存在一些錯誤,但這不是進行週期性反覆評估的最重要原因。b.優化...