哈爾濱理工大學第七屆程序設計競賽決賽(網絡賽-高年級組)A - 所有情況的和
阿新 • • 發佈:2017-12-19
mod 測試數據 理工大學 網絡賽 種類 -c spa amp 決定
每件裝備有自己的屬性值,能給tabris屬性加成。
對於不同種類的裝備之間有疊加效果,如果選擇多件裝備,最終的屬性加成為他們的乘積。
若tabris初始屬性值為0,最後屬性加成的期望是多少。 ai,bi∈[1,106]
題目描述
在acimo星球, tabris 是一名勇敢的屠龍勇士,在上綠島屠龍前決定挑選N種裝備武裝自己,現在每種裝備有兩個,**但每種裝備tabris必須選擇拿一個**,**不能多也不能少**。每件裝備有自己的屬性值,能給tabris屬性加成。
對於不同種類的裝備之間有疊加效果,如果選擇多件裝備,最終的屬性加成為他們的乘積。
若tabris初始屬性值為0,最後屬性加成的期望是多少。
輸入描述:
有多組測試樣例,輸入到文件結束。
每組測試數據的第一行包含一個正整數NN,表示裝備的種類數。
接下來N行,每行兩個正整數ai、bi,表示兩個不同的第ii種裝備的屬性加成值。
N∈[1,103]
輸出描述:
對於每組測試數據輸出一個整數,為了方便輸出最終的結果先乘2N再對1e9+7取模後的值。示例1
輸入
4 1 2 3 4 5 6 7 8
輸出
3465
說明
3465 = (1*3*5*7) + (1*3*5*8) +(1*3*6*7) + (1*3*6*8) + (1*4*5*7) + (1*4*5*8) + (1*4*6*7) + (1*4*6*8) + (2*3*5*7) + (2*3*5*8) + (2*3*6*7) + (2*3*6*8) + (2*4*5*7) + (2*4*5*8) + (2*4*6*7) + (2*4*6*8) ;
題解
$dp$。
通過稍微簡單的分析就可以知道是一個簡單的$dp$。
#include <bits/stdc++.h> using namespace std; const int maxn = 1000 + 10; int T, n; long long mod = 1e9 + 7; long long ans; long long a[maxn], b[maxn]; int main() { while(~scanf("%d", &n)) { for(int i = 1; i <= n; i ++) { scanf("%lld%lld", &a[i], &b[i]); } for(int i = 2; i <= n; i ++) { long long sum = a[i - 1] + b[i - 1]; sum = sum % mod; a[i] = a[i] * sum % mod; b[i] = b[i] * sum % mod; } long long ans = (a[n] + b[n]) % mod; printf("%lld\n", ans); } return 0; }
哈爾濱理工大學第七屆程序設計競賽決賽(網絡賽-高年級組)A - 所有情況的和