結果

問題 No.158 奇妙なお使い
ユーザー furafura
提出日時 2020-06-11 12:26:59
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 52 ms / 5,000 ms
コード長 1,160 bytes
コンパイル時間 1,899 ms
コンパイル使用メモリ 194,096 KB
最終ジャッジ日時 2025-01-11 01:10:32
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 27
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:11:23: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   11 |         rep(i,3) scanf("%d",&a[i]);
      |                  ~~~~~^~~~~~~~~~~~
main.cpp:12:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   12 |         scanf("%d",&nb);
      |         ~~~~~^~~~~~~~~~
main.cpp:13:23: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   13 |         rep(i,3) scanf("%d",&b[i]);
      |                  ~~~~~^~~~~~~~~~~~
main.cpp:14:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   14 |         scanf("%d",&nc);
      |         ~~~~~^~~~~~~~~~
main.cpp:15:23: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   15 |         rep(i,3) scanf("%d",&c[i]);
      |                  ~~~~~^~~~~~~~~~~~

ソースコード

diff #

#include <bits/stdc++.h>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

const int INF=1<<29;

int main(){
	int a[3],b[3],c[3],nb,nc;
	rep(i,3) scanf("%d",&a[i]);
	scanf("%d",&nb);
	rep(i,3) scanf("%d",&b[i]);
	scanf("%d",&nc);
	rep(i,3) scanf("%d",&c[i]);

	static int dp[11][101][10001];
	rep(i,11) rep(j,101) rep(k,10001) dp[i][j][k]=-INF;
	dp[a[0]][a[1]][a[2]]=0;
	for(int total=10000;total>=0;total--){
		for(int i=10;i>=0;i--) for(int j=100;j>=0;j--) {
			int k=total-1000*i-100*j;
			if(k<0 || 10000<k || dp[i][j][k]==-INF) continue;

			int sum,i2,j2,k2;
			sum=nb;
			i2=min(sum/1000,i); sum-=1000*i2;
			j2=min(sum/100,j);  sum-=100*j2;
			k2=min(sum,k);      sum-=k2;
			if(sum==0){
				dp[i-i2+b[0]][j-j2+b[1]][k-k2+b[2]]=max(dp[i-i2+b[0]][j-j2+b[1]][k-k2+b[2]],dp[i][j][k]+1);
			}

			sum=nc;
			i2=min(sum/1000,i); sum-=1000*i2;
			j2=min(sum/100,j);  sum-=100*j2;
			k2=min(sum,k);      sum-=k2;
			if(sum==0){
				dp[i-i2+c[0]][j-j2+c[1]][k-k2+c[2]]=max(dp[i-i2+c[0]][j-j2+c[1]][k-k2+c[2]],dp[i][j][k]+1);
			}
		}
	}

	int ans=0;
	rep(i,11) rep(j,101) rep(k,10001) ans=max(ans,dp[i][j][k]);
	printf("%d\n",ans);

	return 0;
}
0